2024-06-16 11:32:58 发布
网友
所以,我有一个函数,我要调用很多次。该函数按对迭代列表,如下所示:
for a, b in zip(the_list, the_list[1:]): # do stuff with a and b
我很想预先计算zip(the_list, the_list[1:])的结果,这样我就可以重用它,而不必每次调用这个函数时都计算它。在
zip(the_list, the_list[1:])
不幸的是,由于zip(...)是一个生成器,我不能重用它的结果。有没有办法可以将生成器重置回开头,或者存储压缩后的元组列表以便直接迭代?在
zip(...)
可以将生成器缓冲到如下列表:
z = list(zip(x, y))
但是,我怀疑这样做是否会带来很多性能上的好处,因为zip本身只是对其参数进行迭代,如果将其缓冲到一个列表中,您最终会做的就是这样做。当您调用zip时,实际上没有多少“计算”在进行。在
zip
编辑:这假设您使用的是python3,其中zip确实返回了一个生成器。在Python2中,zip返回一个列表,因此您最好在函数调用之间重用这个列表。在
pairs = list(zip(the_list, the_list[1:])) for a,b in pairs: # etc...
可以将生成器缓冲到如下列表:
但是,我怀疑这样做是否会带来很多性能上的好处,因为
zip
本身只是对其参数进行迭代,如果将其缓冲到一个列表中,您最终会做的就是这样做。当您调用zip
时,实际上没有多少“计算”在进行。在编辑:这假设您使用的是python3,其中
zip
确实返回了一个生成器。在Python2中,zip
返回一个列表,因此您最好在函数调用之间重用这个列表。在相关问题 更多 >
编程相关推荐