从python的zip中保存迭代器

时间:2016-02-07 19:03:43

标签: python generator

所以,我有一个功能,我必须打电话很多次。该函数按对象迭代列表:

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

我真的想预先计算zip(the_list, the_list[1:])的结果,以便我可以重复使用它,而不必在每次调用此函数时计算它。

不幸的是,由于zip(...)是一个生成器,我无法重用其结果。有没有什么方法可以将生成器重置回到开头,或者存储压缩的元组列表以便我可以直接迭代它?

2 个答案:

答案 0 :(得分:0)

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

for a,b in pairs:
    # etc...

答案 1 :(得分:0)

您可以将生成器缓冲到如下列表:

z = list(zip(x, y))

然而,我怀疑在这方面会有很大的性能优势,因为zip本身只是在迭代它的参数,这就是你将它缓冲到一个你最终做的事情。名单。没有太多"计算"当你拨打zip时会继续。

编辑:假设您使用的是Python 3,其中zip确实会返回生成器。在Python 2中,zip返回一个列表,因此您最好不要在函数调用之间重用此列表。