Python с противоречивым результатом при печати, интересно, что может быть причиной?

#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