使用OR与IF语句进行比较

时间:2008-09-29 09:12:25

标签: python comparison boolean

在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"

6 个答案:

答案 0 :(得分:33)

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"

如果在您的程序运行期间不需要更改令人敬畏的作业列表,则首选使用frozenset而不是set

答案 1 :(得分:3)

您可以使用:

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

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

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

def func():
    if job in AwesomeJobs:
        print "awesome"

答案 2 :(得分:1)

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

答案 3 :(得分:1)

虽然我认为你不能直接做你想做的事,但另一个选择是:

if job in [ "mechanic", "tech" ]:
    print "awesome"
elif job in [ "tool", "rock" ]:
    print "dolt"

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

在其他语言中,我会使用switch / select语句来完成工作。 You can do that in python too