所以,我有一个功能,我必须打电话很多次。该函数按对象迭代列表:
for a, b in zip(the_list, the_list[1:]):
# do stuff with a and b
我真的想预先计算zip(the_list, the_list[1:])
的结果,以便我可以重复使用它,而不必在每次调用此函数时计算它。
不幸的是,由于zip(...)
是一个生成器,我无法重用其结果。有没有什么方法可以将生成器重置回到开头,或者存储压缩的元组列表以便我可以直接迭代它?
答案 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
返回一个列表,因此您最好不要在函数调用之间重用此列表。