Python:对可变数量的不等式条件使用 OR 运算符
Python: Using an OR operator for variable number of inequality conditions
假设我在列表 x = [1.2, -0.4, 3.5, ....]
中有 n
个值
我需要检查其中是否至少有一个小于零。
所以基本上,如果我只有两个值,我会写成
if x[0]< 0 or x[1] < 0
但是现在,我需要在循环中使用相同的或运算符来检查列表中的每个值。
命令 any(x) < 0
似乎每次都 return False
。
我该怎么办?
any
未矢量化。您必须将它应用于 x
:
中的每个对象
any(n < 0 for n in x)
n < 0 for n in x
创建了一个从 x
一次产生一个值的生成器,并且非常高效,因为它是短路的,这意味着它会中断(并且 return True
) 一旦找到第一个 n
即 < 0
.
当使用 any()
或 all()
时,pc 将检查 iterable 中的元素是 True 还是 False。因此,您需要添加一个列表理解来创建可迭代对象:
any([elt < 0 for elt in x])
基本上您需要执行以下操作:
any(value < 0 for value in X)
你可以找到详细的解释here
您也可以使用 numpy 进行向量化运算
import numpy as np
x = np.array([1.2, -0.4, 3.5,0])
x<=0 # will return the array of boolean values
如果你只需要检查条件是否满足那么
any(x<=0) # will return true if array contains atleast one True
假设我在列表 x = [1.2, -0.4, 3.5, ....]
中有 n
个值
我需要检查其中是否至少有一个小于零。
所以基本上,如果我只有两个值,我会写成
if x[0]< 0 or x[1] < 0
但是现在,我需要在循环中使用相同的或运算符来检查列表中的每个值。
命令 any(x) < 0
似乎每次都 return False
。
我该怎么办?
any
未矢量化。您必须将它应用于 x
:
any(n < 0 for n in x)
n < 0 for n in x
创建了一个从 x
一次产生一个值的生成器,并且非常高效,因为它是短路的,这意味着它会中断(并且 return True
) 一旦找到第一个 n
即 < 0
.
当使用 any()
或 all()
时,pc 将检查 iterable 中的元素是 True 还是 False。因此,您需要添加一个列表理解来创建可迭代对象:
any([elt < 0 for elt in x])
基本上您需要执行以下操作:
any(value < 0 for value in X)
你可以找到详细的解释here
您也可以使用 numpy 进行向量化运算
import numpy as np
x = np.array([1.2, -0.4, 3.5,0])
x<=0 # will return the array of boolean values
如果你只需要检查条件是否满足那么
any(x<=0) # will return true if array contains atleast one True