简单的内联代码(python)的麻烦

El *_*uso 0 python python-2.7

为什么以下两个陈述导致不同的结果?我在这里错过了什么?

list = [1,2]

if (item < 0 for item in list):
    print "This prints."  

for item in list:
    if item < 0:
        print "This doesn't print."
Run Code Online (Sandbox Code Playgroud)

Cor*_*mer 5

第一个是生成器表达式,真实性将取决于是否生成任何项目.它将打印一次或零次.从这个意义上说,你会得到任何长度列表相同的行为.

第二个实际上迭代每个项目,并将打印满足该条件的每个项目.

一个(hacky)解决方法,使这个单线程

>>> l = [-1, -2, 1, 2]
>>> print('this prints\n' * len([item for item in l if item < 0]))
this prints
this prints
Run Code Online (Sandbox Code Playgroud)