如何在python中执行“if-for”语句?

时间:2010-12-03 18:33:21

标签: python

使用python,我想对整个列表进行测试,如果列表中的每个项目的所有语句都为真,则采取一定的行动。

伪代码:如果“test涉及x”对于“list”中的每个x都为真,则执行“this”。

似乎应该有一种简单的方法来做到这一点。

我应该在python中使用什么语法?

6 个答案:

答案 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比较甚至第二个比较渲染整个结果为假。