2016-01-02 2 views
-1

Я новичок в python, и я хотел попытаться использовать понимание списка, но результат, который я получаю, - None.Вывод списка справок None

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.appendNone. Вам нужно настроить выражение в понимании списка для возврата букв.

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_ список привилегии с побочными эффектами. Тем не менее, я думаю, это лучше, чем заполнение списка comp с кучей 'None' ... –

0

Если порядок не имеет значения, это сделать:

resultlist = list({i for word in wordlist for i in word}) 
Смежные вопросы