为什么for循环和列表理解产生不同的结果?
animals = ['lion' ,'tiger', 'lepord', 'cheetah', 'cat']
find = []
for name in animals:
if name == 'lion':
find.append(name)
print (find)
find = [find.append(name) for name in animals if name=='lion']
print (find)
for循环输出为['lion']
而 列表理解是['none']
。为什么for循环和列表理解产生不同的结果?
为什么?
None
来自列表方法append
,它返回None
。
不需要调用append
为:
[find.append(name) for name in animals if name=='lion']
写:
[name for name in animals if name=='lion']
或'filter(lambda name:name =='lion',animals)' –
@ cricket_007只有当条件是单个函数时,过滤优先于列表理解:'[x for x in L if f(x)] '=>'filter(f,L)'。 –
对,在这种情况下,对,是的 –
对于初学者来说,你想'append'到'find'应该甚至不存在只因只有当列表理解完成时才会被分配... – deceze
'append'不返回附加列表,它追加,但返回'None'。 – Julien
您将'find'重新分配给列表理解。不要这样做,打印'find',并*瞧!*! –