В принципе, я в следующей ситуации - я генерирую список, например.Множественное использование генератора из списка в Python
l = [2*x for x in range(10)]
, который я повторяю позже, в несколько раз, например.
for i in l: print i # 0,2,4,6,8,10,12,14,16,18
for i in l: print i # 0,2,4,6,8,10,12,14,16,18
for i in l: print i # 0,2,4,6,8,10,12,14,16,18
Проблема заключается в том, что список слишком велик, чтобы поместиться в памяти, поэтому я использую его форму генератора, а именно:
l = (2*x for x in range(10))
Однако после этого строительства только первой итерации работ:
for i in l: print i # 0,2,4,6,8,10,12,14,16,18
for i in l: print i #
for i in l: print i #
В чем проблема? Как я могу перебирать его через несколько раз?
Следует, вероятно, отметить, что 'xrange' является версией генератора' range' в Python 2, в то время как 'range' в питона 3+ генератор и нет 'xrange'. –
@MylesGallagher да, я обновил. Я догадался, что мы говорили только для python 2. – JuniorCompressor
Мне нравится функция генератора. В качестве альтернативы, для такого простого генератора допустима лямбда, например, «gen = lambda: (2 * x для x в xrange (10))». И, конечно, любой из этих функций может быть задан множителями и аргументами длины, чтобы сделать их более универсальными. –