-1

我要检查多个条件的if语句有没有办法在Python中的if语句中组合成员比较?

if a: 
    # do something 

多个案件在这种情况下为真== 1,A == 2,== 3

,而不需要编写

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

我想这样

东西
+3

'如果有的话(为条件的条件==在[1,2,3]):'?但是你的错误并不是来自那个代码。 – jonrsharpe

+1

''带有多个元素的数组的真值不明确''听起来像是一个numpy错误消息。你是否正确地表示了你的数据? – wwii

+0

@jonrsharpe:应该是'如果在[1,2,3]:' – hop

回答

1

只需添加到其他的答案,你最好的选择肯定会是这样的逻辑:

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

或甚至更好

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

我想在这里强调的事情是,你应该使用set这种情况。查找会更有效率。

另外,python documentation推荐。

常见用途包括成员资格测试,从 序列删除重复,以及计算的数学运算,例如路口, 集,差,和对称差

+1

你的第一个构造肯定会显着*较慢:'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}' –

+0

这就是我提出第二种解决方案的原因。正如我所说的,我的目标是让他深入了解如何轻松优化解决方案。但你有一个好点,我会更新。 – scharette

1

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

什么你试图写可以写成

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

您是在正确的道路上的一种。什么是需要的是:

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]): 

这也是以同样的方式。

1

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() 
>>> 
+0

当然不是标准的python,如果[1,2,3]中的条件[==]条件无效语法 –

+0

确实我的问题是,我的“a”有多个值,我不知道 – vanilla

+1

@香草 - 当发生这样的意外事件时,通常有助于检查操作数。一种方法是[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