如果我试图在一个非常小的范围内移动,并且希望引用在迭代的前面一步中创建的变量,我如何引用它?
如果我使用一个范围为2,6的for循环,并且在第一次迭代中我创建了两个变量ai & bi,那么在第4次或第5次迭代中可以引用a3吗?或者类似于doSomething(ai-1,ai)
为可怕的psuedo代码道歉。
发布于 2014-09-12 04:58:07
你不能“操纵迭代器”。但你可以做两件简单的事。
首先,由于您显然是在迭代序列(如range),所以可以使用索引。例如:
for i, value in enumerate(my_sequence):
if 3 <= i <= 4:
old_value = my_sequence[i-2]
do_something(old_value, value)其次,您可以只记住旧的值:
lastlast = last = None
for value in my_sequence:
if lastlast is not None:
do_something(lastlast, value)
lastlast, last = last, value如果您想使第二个函数更易读,您可以非常容易地编写一个函数,该函数可以进行任何迭代,并在三个值的重叠组上迭代,所以您可以这样做:
for lastlast, last, value in triplets(my_sequence):
do_something(lastlast, value)那么,如何编写triplets函数呢?
def triplets(iterable):
a, b, c = itertools.tee(iterable, 3)
next(b, None)
next(c, None)
next(c, None)
return itertools.izip(a, b, c)或者,如果您只关心序列,而不是一般的可迭代性,并且愿意浪费一些空间来节省一点时间,并且确实节省了一点代码:
def triplets(sequence):
return zip(sequence, sequence[1:], sequence[2:])https://stackoverflow.com/questions/25800970
复制相似问题