2017-04-07 30 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

對,在這種情況下,對,是的 –

相關問題