从python的zip中保存迭代器

2024-06-16 11:32:58 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我有一个函数,我要调用很多次。该函数按对迭代列表,如下所示:

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

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

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


Tags: andthe函数in列表forwithzip
2条回答

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

z = list(zip(x, y))

但是,我怀疑这样做是否会带来很多性能上的好处,因为zip本身只是对其参数进行迭代,如果将其缓冲到一个列表中,您最终会做的就是这样做。当您调用zip时,实际上没有多少“计算”在进行。在

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

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

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

相关问题 更多 >