#python
#python
Вопрос:
>>> all=[""]
>>> i="One"
>>> l=(item for item in all if item in i)
>>> print(len(list(l)))
1
>>> print(len(list(l)))
0
>>>
первый ответ на печать равен 1 без каких-либо изменений, второй раз — 0
Комментарии:
1. Использование
all
в качестве имени переменной перезаписывает встроеннуюall()
функцию. Настоятельно рекомендую изменить имя на что-то другое.
Ответ №1:
Это потому l
, что это генератор. Когда он останавливает итератор (после первого раза), он пуст и возвращает len 0.
Используйте [item for item in all if item in i]
вместо (item for item in all if item in i)
для создания списка
Комментарии:
1. Вежливая поправка: строго говоря,
l
это генератор, поэтому срок его действия истек после использования.2. @S3DEV Вы правы. Итератор — это то, что возвращает генератор (например, индекс). Спасибо!
Ответ №2:
ваш l
генератор. При первом вызове вы получаете list(l)
список. Во второй раз, когда вы его вызываете, генератор пуст, поэтому длина равна 0