使用python,我想对整个列表进行测试,如果列表中的每个项目的所有语句都为真,则采取一定的行动。
伪代码:如果“test涉及x”对于“list”中的每个x都为真,则执行“this”。
似乎应该有一种简单的方法来做到这一点。
我应该在python中使用什么语法?
答案 0 :(得分:28)
使用all()
。它将iterable作为参数,如果所有条目都计算为True
,则返回True
。例如:
if all((3, True, "abc")):
print "Yes!"
您可能需要某种生成器表达式,例如
if all(x > 3 for x in lst):
do_stuff()
答案 1 :(得分:6)
>>> x = [True, False, True, False]
>>> all(x)
False
如果列表中的所有元素均为True
,则 all()会返回True
同样,如果任何元素为真,any()将返回True
。
答案 2 :(得分:4)
示例(测试所有元素大于0)
if all(x > 0 for x in list_of_xs):
do_something()
上面最初使用了列表推导(if all([x > 0 for x in list_of_xs]):
),正如delnan所指出的那样(感谢)生成器表达式会更快,因为生成器表达式终止于第一个False
,而此表达式适用于与列表中的所有元素进行比较。
但是,请注意生成器表达式,如:
all(x > 0 for x in list_of_xs)
如果您正在使用pylab(将ipython作为'ipython -pylab'启动),则所有函数将替换为numpy.all,它不会正确处理生成器表达式。
all([x>0 for x in [3,-1,5]]) ## False
numpy.all([x>0 for x in [3,-1,5]]) ## False
all(x>0 for x in [3,-1,5]) ## False
numpy.all(x>0 for x in [3,-1,5]) ## True
答案 3 :(得分:3)
if reduce(lambda x, y: x and involve(y), yourlist, True):
certain_action()
involve
是您要为列表中的每个元素涉及的操作,yourlist
是您的原始列表,certain_action
是您希望在所有语句都为真时执行的操作
答案 4 :(得分:3)
我相信你想要all()
方法:
$ python
>>> help(all)
Help on built-in function all in module __builtin__:
all(...)
all(iterable) -> bool
Return True if bool(x) is True for all values x in the iterable.
答案 5 :(得分:0)
all()
阶段, map()
单独使用效果不佳。
见下文:
all((x==0 for x in xrange(1000))
和
all([x==0 for x in xrange(1000)])
第二个例子将执行1000比较甚至第二个比较渲染整个结果为假。