所以,我有一个函数,我必须调用很多次。该函数按成对遍历列表,如下所示:
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...