我目前正在这样做:
if x in a and y in a and z in a and q in a and r in a and s in a:
print b
是否有更多pythonic方式来表达此if
声明?
答案 0 :(得分:29)
使用all函数可以以一种简洁的方式编写它:
if all(i in a for i in (x, y, z, q, r, s)):
print b
此代码应该与您的示例几乎完全相同,即使对象不可清除或a
对象有一些有趣的__contains__
方法。 all
函数在原始问题中也具有与and
链相似的short-circuit行为。在元组(或列表)中收集要测试的所有对象将保证与原始问题中的测试执行顺序相同。如果您使用集合,则订单可能是随机的。
答案 1 :(得分:18)
另一种方法是使用子集:
if {x, y, z, q, r, s}.issubset(a):
print(b)
REPL示例:
>>> {0, 1, 2}.issubset([0, 1, 2, 3])
True
>>> {0, 1, 2}.issubset([1, 2, 3])
False
使用此方法的一个警告是,x
,y
,z
等所有内容都必须是可以播放的。
答案 2 :(得分:7)
if all(v in a for v in {x, y, z, q, r, s}):
print(b)
答案 3 :(得分:3)
转换为set,或者:
if len({x, y, z, q, r, s} - set(a)) == 0:
print b
或
t = {x, y, z, q, r, s}
if t & set(a) == t:
print b