16

在 Python 中使用 IF 语句时,您必须执行以下操作才能使“级联”正常工作。

if job == "mechanic" or job == "tech":
        print "awesome"
elif job == "tool" or job == "rock":
        print "dolt"

检查“等于”时,有没有办法让 Python 接受多个值?例如,

if job == "mechanic" or "tech":
    print "awesome"
elif job == "tool" or "rock":
    print "dolt"
4

6 回答 6

39
if job in ("mechanic", "tech"):
    print "awesome"
elif job in ("tool", "rock"):
    print "dolt"

括号中的值是一个元组。in操作员检查左侧项目是否出现在右侧句柄元组内的某个位置。

请注意,当 Python 使用in运算符搜索元组或列表时,它会进行线性搜索。如果右侧有大量项目,这可能是性能瓶颈。这样做的更大规模的方法是使用frozenset

AwesomeJobs = frozenset(["mechanic", "tech", ... lots of others ])
def func():
    if job in AwesomeJobs:
        print "awesome"

如果在程序运行期间不需要更改出色作业列表,则首选使用frozensetover 。set

于 2008-09-29T09:13:53.337 回答
4

您可以在:

if job  in ["mechanic", "tech"]:
    print "awesome"

当检查非常大的数字时,可能还值得存储一组要检查的项目,因为这样会更快。例如。

AwesomeJobs = set(["mechanic", "tech", ... lots of others ])
...

def func():
    if job in AwesomeJobs:
        print "awesome"
于 2008-09-29T09:15:53.847 回答
1
if job in ("mechanic", "tech"):
    print "awesome"
elif job in ("tool", "rock"):
    print "dolt"
于 2008-09-29T09:14:14.427 回答
1

虽然我不认为你可以直接做你想做的事,但一种选择是:

if job in [ "mechanic", "tech" ]:
    print "awesome"
elif job in [ "tool", "rock" ]:
    print "dolt"
于 2008-09-29T09:14:18.267 回答
1

具有常量项的元组本身作为常量存储在编译函数中。它们可以用一条指令加载。另一方面,列表和集合总是在每次执行时重新构建。

元组和列表都对 in 运算符使用线性搜索。Sets 使用基于散列的查找,因此对于更多的选项会更快。

于 2008-09-29T16:31:06.687 回答
0

在其他语言中,我会使用 switch/select 语句来完成工作。你也可以在 python 中做到这一点

于 2008-09-29T09:14:54.037 回答