Почему zip(*(range(1000),)*1000000) такой быстрый?

В Python 3 как строка zip(*(range(1000),)*1000000) выполняется менее чем за секунду?

Изменить: этот вопрос был отмечен как возможный дубликат вопроса Почему "1000000000000000 в диапазоне (1000000000000001)" так быстро в Python 3?. Хотя этот вопрос касаетсяrange функция, этот вопрос касается zip функция и почему это может происходить так быстро.

1 ответ

Решение

Поскольку, начиная с python3, zip возвращает итератор, поэтому он фактически генерирует элементы по вашему запросу.

То же самое касается range, map а также filter.

Раньше было range а также xrange, zip а также izip, где первый создает всю последовательность в памяти, а затем начинает повторять ее, а второй генерирует элементы на лету. Начиная с python3, они удалили другую версию, и по умолчанию используется итератор.

  • range() теперь ведет себя как xrange()используется, чтобы вести себя, за исключением того, что он работает со значениями произвольного размера. Последнего больше нет.

  • zip() теперь возвращает итератор.

Другие вопросы по тегам