Python Challenge # 2 - для проблемы петли - PullRequest
3 голосов
/ 25 сентября 2011

Python Challenge # 2

Ответ, который я нашел

FILE_PATH = 'l2-text'
f = open(FILE_PATH)
print ''.join([ t for t in f.read() if t.isalpha()])
f.close()

Вопрос: Почему их 't' перед циклом fort for t in f.read().Я понимаю остальную часть кода, за исключением этого одного бита.Если я пытаюсь удалить его, я получаю сообщение об ошибке, так что же он делает?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 25 сентября 2011

Это понимание списка , а не for -loop.

Понимания списка обеспечивают краткий способ создания списков.

[t for t in f.read() if t.isalpha()]

Это создает list всех символов alpha в файле (f). Вы тогда join() все вместе.

Теперь у вас есть ссылка на документацию, которая должна помочь вам понять понимание. Искать вещи сложно, когда ты не знаешь, как они называются!

Надеюсь, это поможет.

2 голосов
/ 25 сентября 2011

[t for t in f.read() if t.isalpha()] - это понимание списка. По сути, он принимает данную итерацию (f.read()) и формирует список, беря все прочитанные элементы, применяя дополнительный фильтр (предложение if) и функцию отображения (часть слева от for). .

Однако здесь часть отображения тривиальна, поэтому синтаксис выглядит немного избыточным: для каждого данного элемента t он просто добавляет значение элемента (t) в список вывода. Но возможны более сложные выражения, например, t*2 for t ... будет дублировать все допустимые символы.

0 голосов
/ 25 сентября 2011

обратите внимание, что также допустимо следующее:

print ''.join(( t for t in f.read() if t.isalpha()))

вместо [и] у вас есть (и) Это задает генератор вместо списка. Генератор понимания

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