如果我试图在非常小的范围内移动,并且想要引用在迭代的早期步骤中创建的变量,我该如何引用它?
如果我使用范围为2,6的for循环,并且在第一次迭代中我创建两个变量a [i]& b [i],是否有可能在第4次或第5次迭代时引用a3?或类似doSomething(a [i-1],a [i])
为可怕的伪代码道歉。
答案 0 :(得分:0)
你不能“操纵迭代器”。但你可以做两件简单的事情。
首先,由于您显然是在迭代序列(如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
如果你想让第二个更具可读性,你可以很容易地编写一个可以迭代的函数并迭代3个值的重叠组,所以你可以这样做:
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:])