2016-02-07 3 views
0

Итак, у меня есть функция, которую я должен назвать тонной раз. Эта функция перебирает список по парам, как так:Сохранение итератора из zip python

for a, b in zip(the_list, the_list[1:]): 
    # do stuff with a and b 

Я бы очень хотел, чтобы предвычисления результата из zip(the_list, the_list[1:]), так что я могу использовать его и не нужно вычислить его каждый раз, когда я называю эту функцию.

К сожалению, поскольку zip(...) является генератором, я не могу повторно использовать его результат. Есть ли способ, с помощью которого я могу вернуть генератор в начало или сохранить список застегнутых кортежей, чтобы я мог напрямую перебирать это?

+0

Создание генератора не стоит вам ничего. – alexanderlukanin13

ответ

0

Вы можете буфер генератора в список следующим образом:

z = list(zip(x, y)) 

Однако, я сомневаюсь, что там будет много пользы производительности в этом, так как zip самих просто итерации его аргументы, которые это то, что вы закончите, если буферизировать его в список. Там не очень много «вычислений», когда вы звоните zip.

Редактировать: Предполагается, что вы используете Python 3, где zip действительно возвращает генератор. В Python 2 zip возвращает список, поэтому вам, вероятно, лучше не использовать этот список между вызовами функций.

+0

Имеет смысл, спасибо! Желательное выступление с моей стороны. –

0
pairs = list(zip(the_list, the_list[1:])) 

for a,b in pairs: 
    # etc... 
Смежные вопросы