2016-01-02 37 views
-1

我是新來的python,我想嘗試使用列表理解,但我得到的結果是無。列表理解輸出是無

print 
wordlist = ['cat', 'dog', 'rabbit'] 
letterlist = [] 
letterlist = [letterlist.append(letter) for word in wordlist for letter in word if letter not in letterlist] 
print letterlist 

# output i get: [None, None, None, None, None, None, None, None, None] 
# expected output: ['c', 'a', 't', 'd', 'o', 'g', 'r', 'b', 'i'] 

這是爲什麼?它似乎有點作用,因爲我得到預期的結果數量(9),但它們都是無。

回答

2

list.append(element)不會返回任何內容 - 它將元素附加到列表中。

你的代碼可以改寫爲:

wordlist = ['cat', 'dog', 'rabbit'] 
letterlist = [letter for word in wordlist for letter in word] 
letterlist = list(set(letterlist)) 
print letterlist 

...如果你真的想用一個列表理解,或者:

wordlist = ['cat', 'dog', 'rabbit'] 
letterset = set() 
for word in wordlist: 
    letterset.update(word) 
print letterset 

...這無疑更加清晰。這兩種都假定順序無關緊要。如果是這樣,你可以使用OrderedDict:

from collections import OrderedDict 
letterlist = list(OrderedDict.fromkeys("".join(wordlist)).keys()) 
print letterlist 
+0

它工作很好,謝謝你的幫助。 – JeremyK

1

list.append返回None。您需要調整列表理解中的表達式以返回字母。

wordlist = ['cat', 'dog', 'rabbit'] 
letterset = set() 
letterlist = [(letterset.add(letter), letter)[1] 
       for word in wordlist 
       for letter in word 
       if letter not in letterset] 
print letterlist 
+0

可愛,但我_hatess_列表副作用譜曲。不過,我想這比用一堆'None'填充列表更好... –

0

如果順序並不重要,這樣做:

resultlist = list({i for word in wordlist for i in word})