如何在Python中实现“if-for”语句?

13 投票
6 回答
10720 浏览
提问于 2025-04-16 07:59

我想用Python对一个列表里的每个项目进行测试,如果列表中的每个项目都符合某个条件,就执行一个特定的操作。

简单来说,就是:如果“对列表中的每个x进行的测试”都是真的,那么就做“这个事情”。

看起来应该有个简单的方法来实现这个。

我在Python中应该用什么样的语法呢?

6 个回答

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 -pylab'启动ipython),那么all函数会被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 
6
>>> x = [True, False, True, False]
>>> all(x)
False

all() 函数会检查列表中的所有元素,如果它们都是 True,那么这个函数就会返回 True

同样,any() 函数会检查列表中是否有任何一个元素是 True,如果有的话,它也会返回 True

28

使用 all()。这个函数接受一个可迭代的对象作为参数,如果所有的元素都能被判断为 True,它就会返回 True。举个例子:

if all((3, True, "abc")):
    print "Yes!"

你可能需要某种生成器表达式,比如

if all(x > 3 for x in lst):
    do_stuff()

撰写回答