2017-01-17 59 views
6
l = ["a", "b", "c", "d", "e"] 
if "a" in l and "b" in l and "c" in l and "d" in l: 
    pass 

寫這個if語句的方法是什麼?Python中if語句的更短路徑

嘗試:

if ("a" and "b" and "c" and "d") in l: 
    pass 

但這似乎是不正確的。什麼是正確的方法? 的Python 3

+4

聞訊趕來'all'和'any'? –

+4

請注意,第二個片段評估爲「如果」一個「in:」。 – jonrsharpe

回答

11

一個想法可能是使用all(..)和發電機:

if all(x in l for x in ['a','b','c','d']): 
    pass 

所有作爲輸入任何類型的迭代,並檢查所有元素的迭代器發出,bool(..)True

現在在all之內,我們使用了一個發生器。發電機的工作原理是:

<expr> for <var> in <other-iterable> 

(不帶括號)

因此,它需要每一個元素在<other-iterable>,並在其上調用<expr>。在這種情況下是<expr>x in l,和x<var>

#   <var> 
#   | 
x in l for x in ['a','b','c','d'] 
#\----/   \---------------/ 
#<expr>   <other-iterable> 

generators進一步解釋。

+3

非常乾淨的說明 –

+1

@MoinuddinQuadri:謝謝你的評價:)。 –

5
l = "abcde" 
if all(c in l for c in "abcd"): 
    pass 
+2

我認爲OP在這裏給出了一個char字符串的例子,顯然在現實生活中可能會檢查多個char字符串,但仍然是很好的答案。 –

6

您可以使用集:

l = { 'a', 'b', 'c', 'd', 'e' } 

if { 'a', 'b', 'c', 'd' } <= l: 
    pass 
4

一種不同的方法是使用幾組:

l = ['a', 'b', 'c', 'd', 'e'] 
if set(['a', 'b', 'c', 'd']).issubset(set(l)): 
    pass