2017-04-07 131 views
-1
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循环和列表理解产生不同的结果?

为什么?

+1

对于初学者来说,你想'append'到'find'应该甚至不存在只因只有当列表理解完成时才会被分配... – deceze

+2

'append'不返回附加列表,它追加,但返回'None'。 – Julien

+0

您将'find'重新分配给列表理解。不要这样做,打印'find',并*瞧!*! –

回答

1

None来自列表方法append,它返回None

不需要调用append为:

[find.append(name) for name in animals if name=='lion'] 

写:

[name for name in animals if name=='lion'] 
+0

或'filter(lambda name:name =='lion',animals)' –

+0

@ cricket_007只有当条件是单个函数时,过滤优先于列表理解:'[x for x in L if f(x)] '=>'filter(f,L)'。 –

+0

对,在这种情况下,对,是的 –

相关问题