Список L
содержит двухэлементные записи из-за L.append([new_word,1])
. Если L
пусто, for
не будет введено, поэтому нет проблем с entry[0]
.
entry[0]
- это слово, а entry[1]
- это счетчик. Вы не можете сказать if new_word in L
, потому что это не просто список строк.
break
останавливает for
после того, как слово найдено.
for/else
это вещь в Python. else
запускается, если for
завершается без прерывания (в данном случае break
). Если new_word
отсутствует в L
, for
не сломается, а новое слово и счетчик 1 добавляются к L
.
FYI, встроенный collections.Counter()
вернет аналогичные результаты.