有没有办法在 python 中的 if 语句中组合成员比较



我想检查 if 语句中的多个条件

if a:
    # do something

在这种情况下,a 适用于多种情况

a==1、a==2、a==3

而不是写作

if a == 1 or a == 2 or a == 3:
    # do something

我正在尝试这样的事情

if a == condition for condition in [1, 2, 3]:
    # do something

你走在正确的道路上。需要的是:

if a in [1,2,3]:
   do something

作为替代

if a == 1 or a == 2 or a ==3:

正如Jonrsharpe正确指出的那样,也许你正在尝试

if any( a==condition for condition in [1,2,3] ):

这也以同样的方式工作。

只是为了补充其他答案,你最好的选择肯定是这个逻辑:

if a in set([1, 2, 3]):
    #do something

甚至更好

 if a in {1, 2, 3}:
    #do something

我想在这里强调的是,在这种情况下,您应该使用set。查找将更加高效。

此外,python文档建议这样做。

常见用途包括成员资格测试、从 序列,并计算相交等数学运算, 并集、差分和对称差分

最简单的写法是if a in (1, 2, 3)

你想写的东西可以写成

if any(a == condition for condition in [1, 2, 3])

The truth value of an array with more than one element is ambiguous看起来像一个numpy错误消息。 如果 a 是一个 numpy ndarray 并且 b 包含您正在测试的值,则可以这样做。

import numpy as np
a = np.arange(6)
b = np.array([6,2,9])
if np.any(a == b[:, None]):
    ...

np.any(a[:,None] == b)

这利用了广播。


您的异常可以使用我的数组重现...

>>> if a == b[:, None]:
    pass
Traceback (most recent call last):
  File "<pyshell#281>", line 1, in <module>
    if a == b[:, None]:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
>>> 

最新更新