从python的zip中保存迭代器



所以,我有一个函数,我必须调用很多次。该函数按成对遍历列表,如下所示:

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

我真的很想预先计算zip(the_list, the_list[1:])的结果,这样我就可以重用它,而不必每次调用这个函数时都计算它。

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

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

z = list(zip(x, y))

但是,我怀疑这样做会有很多性能优势,因为zip本身只是迭代它的参数,如果你把它缓冲到一个列表中,你最终会这样做。 当你打电话给zip时,并没有太多的"计算"。

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

pairs = list(zip(the_list, the_list[1:]))
for a,b in pairs:
    # etc...

最新更新