Python:如何在all()中使用运算符?

时间:2019-06-28 20:53:35

标签: python

我尝试检查具有多个条件的字典中的所有值。使用此代码,例如检查所有值是否均等于1毫无问题:

config = {"a": 1, "b": 1, "c": 1, "d": 3, "e": 2}

if all(value == 1 for value in config.values()):
    print('correct')
else:
    print('wrong')

但是现在,如果要在此代码中添加一些运算符以检查所有值是否均为1或2或3,例如结果无法正常运行:

config = {"a": 1, "b": 1, "c": 1, "d": 3, "e": 5}

if all(value == (1 or 2 or 3) for value in config.values()):
    print('correct')
else:
    print('wrong')

>>>correct

我还尝试了许多变体,例如:

if all(value == 1 or 2 or 3 for value in config.values()):
if all((value == 1 or 2 or 3) for value in config.values()):
if all(value for value in config.values() == 1 or 2 or 3):
...

那么请如何正确使用这些运算符来完成这项工作?

1 个答案:

答案 0 :(得分:2)

all内有一个生成器表达式(可以用任何可迭代的表达式替换),因此请像使用它一样使用

all(value in {1, 2, 3} for value in config.values())

value == (1 or 2 or 3)不起作用,因为它被视为:

value = 1

1 or 2 or 3将返回1 * ,因此将所有值的等式与1进行比较。

* or链将返回链中的第一个 truthy 值或最后一个值作为默认值(无论其是否真实)。