2015-02-13 3 views
0

Это мой код:Почему он не печатает?

wordlist = ['cat','dog','rabbit'] 

letterlist = [ ] 
>>> print ([letterlist.append(letter) for word in wordlist for letter in word if letter not in letterlist]) 

Это выход:

>>> [None, None, None, None, None, None, None, None, None] 

Почему не напечатать:

>>> ['c', 'a', 't', 'd', 'o', 'g', 'r', 'b', 'i'] 

Спасибо.

ответ

1

Ну, метод append возвращает None. Он только изменяет список, о котором идет речь. Это будет работать:

wordlist = ['cat','dog','rabbit'] 

letterlist = [ ] 

for word in wordlist: 
    for letter in word: 
    if letter not in letterlist: 
     letterlist.append(letter) 

print(letterlist) 
+0

приятно, что если размер алфавита конечный, например, 26 букв, то операция 'letter not in letterlist' равна O (1) (постоянное время). – jfs

0

изменение программы:

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

Пояснение:

Здесь вы можете заметить, что нет необходимости в вызове append OURSELF. Сам процесс list-comprehension возвращает список, добавляя неявно.

Я выделил list-comprehansion и print заявление для большей ясности.

Подробнее о понимании перечня, чтобы использовать его в будущих приложениях. Это будет

  1. позволяет экономить время
  2. уменьшить строку кода
  3. поможет вам понять, что код других людей делает

Надеется, что это помогает.

+1

Добавьте дополнительную информацию о своем коде. – Christian

+0

неверно. OP хочет создать список без дубликатов, сохраняющих заказ. В вашем случае 'letterlist' пуст, пока не будет создан весь новый список. [@ hfhc2 показывает правильное решение] (http://stackoverflow.com/a/28502864/4279) – jfs

+0

Вот код, который использует listcomp (не рекомендуется): '[письмо за словом в списке слов для буквы в слове, если письмо не в списке букв а не letterlist.append (письмо)] ' – jfs

Смежные вопросы