有没有办法在Python中的if语句中组合成员比较?
我要检查多个条件的if语句有没有办法在Python中的if语句中组合成员比较?
if a:
# do something
多个案件在这种情况下为真== 1,A == 2,== 3
,而不需要编写
if a == 1 or a == 2 or a == 3:
# do something
我想这样
东西
只需添加到其他的答案,你最好的选择肯定会是这样的逻辑:
if a in set([1, 2, 3]):
#do something
或甚至更好
if a in {1, 2, 3}:
#do something
我想在这里强调的事情是,你应该使用set
这种情况。查找会更有效率。
另外,python documentation推荐。
常见用途包括成员资格测试,从 序列删除重复,以及计算的数学运算,例如路口, 集,差,和对称差
你的第一个构造肯定会显着*较慢:'set([1,2,3])'比简单地检查'[1,2,3]'中的成员资格,因为它必须每次构建集合* 。使用set-literal!然后编译器可以优化!的确,'[1,2,3]'中的x和set([1,2,3])中的'x之间的差异比[1,2,3]中的x之间的差异大得多* '和'x in {1,2,3}' –
这就是我提出第二种解决方案的原因。正如我所说的,我的目标是让他深入了解如何轻松优化解决方案。但你有一个好点,我会更新。 – scharette
最简单的事情写的是if a in (1, 2, 3)
什么你试图写可以写成
if any(a == condition for condition in [1, 2, 3])
您是在正确的道路上的一种。什么是需要的是:
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]):
这也是以同样的方式。
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)
它利用的broadcasting。
你的异常可以使用我阵列再现......
>>> 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()
>>>
当然不是标准的python,如果[1,2,3]中的条件[==]条件无效语法 –
确实我的问题是,我的“a”有多个值,我不知道 – vanilla
@香草 - 当发生这样的意外事件时,通常有助于检查操作数。一种方法是[catch the exception](https://docs.python.org/3/tutorial/errors.html#handling-exceptions)并在'except'套件中打印内容。另一个策略可能是[使用错误消息进行搜索](https://stackoverflow.com/search?q=ValueError%3A+The+truth+value+of+an+array+with+more+than+one+element是+模棱两可。+用+ a.any()+或+ a.all())。 – wwii
'如果有的话(为条件的条件==在[1,2,3]):'?但是你的错误并不是来自那个代码。 – jonrsharpe
''带有多个元素的数组的真值不明确''听起来像是一个numpy错误消息。你是否正确地表示了你的数据? – wwii
@jonrsharpe:应该是'如果在[1,2,3]:' – hop