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
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
一个想法可能是使用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进一步解释。
非常干净的说明 –
@MoinuddinQuadri:谢谢你的评价:)。 –
l = "abcde"
if all(c in l for c in "abcd"):
pass
我认为OP在这里给出了一个char字符串的例子,显然在现实生活中可能会检查多个char字符串,但仍然是很好的答案。 –
您可以使用集:
l = { 'a', 'b', 'c', 'd', 'e' }
if { 'a', 'b', 'c', 'd' } <= l:
pass
一种不同的方法是使用几组:
l = ['a', 'b', 'c', 'd', 'e']
if set(['a', 'b', 'c', 'd']).issubset(set(l)):
pass
你也可以使用这样的情况下set
对象:
l = ["a", "b", "c", "d", "e"]
if set(l) >= set(("a", "b", "c", "d")):
print('pass')
set> = other
测试其他元素是否在集合中。
https://docs.python.org/3/library/stdtypes.html?highlight=set#set.issuperset
闻讯赶来'all'和'any'? –
请注意,第二个片段评估为“如果”一个“in:”。 – jonrsharpe