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

时间:2015-01-30 12:48:53

标签: 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."

2 个答案:

答案 0 :(得分:5)

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

第二个实际上遍历每个项目,并将为满足该条件的每个项目打印

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

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

答案 1 :(得分:0)

你的第一个if是一个生成器表达式。它始终为True,因为它不是None

alist = [1,2]

if (item < 0 for item in alist):
    print 'always be True'
    print (item < 0 for item in alist)

print (item < 0 for item in alist).next()
print [i for i in (item < 0 for item in alist)]

您的第二个代码可以用于逻辑。

注意:不要将list用作变量名。