2017-01-17 78 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