2008-09-29 81 views
5

在Python中使用IF语句时,必须执行以下操作才能使“级联”正常工作。使用或与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" 

回答

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

超过set采用frozenset如果真棒职位列表不需要你的程序的操作过程中被改变是首选。

+0

既然您已经接受了答案,那么为了完整性,在set()`操作中提及`item也会很好。 – tzot 2008-09-29 16:00:33

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

虽然我不认为你可以做你直接想要的东西,一个替代方案是:

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

您可以使用:

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

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

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

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

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

元组和列表都使用线性搜索in-operator。集合使用基于散列的查找,因此对于大量选项来说它会更快。