如何在python中的for循环中操作迭代器?

时间:2014-09-12 04:53:38

标签: python python-2.7

如果我试图在非常小的范围内移动,并且想要引用在迭代的早期步骤中创建的变量,我该如何引用它?

如果我使用范围为2,6的for循环,并且在第一次迭代中我创建两个变量a [i]& b [i],是否有可能在第4次或第5次迭代时引用a3?或类似doSomething(a [i-1],a [i])

为可怕的伪代码道歉。

1 个答案:

答案 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:])