为什么以下两个陈述导致不同的结果?我在这里缺少什么?
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."
答案 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用作变量名。