Python:对可变数量的不等式条件使用OR运算符

Python:对可变数量的不等式条件使用OR运算符,python,python-3.x,logical-operators,Python,Python 3.x,Logical Operators,假设列表中有n个值x=[1.2,-0.4,3.5,…] 我需要检查其中是否至少有一个低于零 所以基本上,如果我只有两个值,我会写 如果x[0]

假设列表中有n个值x=[1.2,-0.4,3.5,…] 我需要检查其中是否至少有一个低于零

所以基本上,如果我只有两个值,我会写 如果x[0]<0或x[1]<0

但是现在,我需要在循环中使用相同的or运算符,以便检查列表中的每个值

命令anyx<0似乎每次都返回False

我该怎么做呢?

任何都不是矢量化的。您必须将其应用于x中的每个对象:

对于x中的n,n<0创建一个生成器,该生成器从x一次生成一个值,并且由于它短路而非常有效,这意味着它将在找到<0的第一个n时中断并返回真值。

当使用任何或所有pc时,将检查iterableare中的元素是否为真。因此,您需要添加一个列表来创建iterable:

any([elt < 0 for elt in x])

基本上,您需要执行以下操作:

any(value < 0 for value in X)

您可以找到详细的解释

您还可以使用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中的值的anyvalue<0,则括号是多余的。@Rishav仅用于显示列表的创建。也许对OP来说更清楚一点。@Rishav他们比多余的更糟糕。any是懒惰的,这意味着它在满足第一个True时停止检查。使用括号,您将强制它遍历整个列表。这对所有人都适用。@Ev.Kounis是真的。您可以将其更改为创建发电机。@Ev.Kounis不完全正确。通过使用[],整个列表确实必须在内存中创建,但任何列表仍将短路,因此它将在找到第一个真正值时立即停止;返回真值;;任何[Foo,Foo,Foo]输出都是单个选中的
any(x<=0) # will return true if array contains atleast one True