2008-09-29 84 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。集合使用基於散列的查找,因此對於大量選項來說它會更快。