测试所有值是否以pythonic方式迭代

时间:2015-07-17 20:56:48

标签: python if-statement

我目前正在这样做:

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声明?

4 个答案:

答案 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

使用此方法的一个警告是,xyz等所有内容都必须是可以播放的。

答案 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