2024-04-19 03:10:48 发布
网友
如果我试图在一个很小的范围内移动,并且想要引用在迭代的前一步中创建的变量,我如何引用它?在
如果我使用一个范围为2,6的for循环,并且在第一次迭代中创建两个变量a[I]&b[I],是否可以在第4次或第5次迭代中引用a3?或者类似剂量的东西(a[i-1],a[i])
为糟糕的psuedo代码道歉。在
你不能“操纵迭代器”。但你可以做两件简单的事。在
首先,由于显然是在遍历序列(比如range),所以可以使用索引。例如:
range
for i, value in enumerate(my_sequence): if 3 <= i <= 4: old_value = my_sequence[i-2] do_something(old_value, value)
其次,你只需记住旧的价值观:
如果您想让第二个更具可读性,您可以很容易地编写一个函数,该函数接受任何iterable并迭代3个值的重叠组,因此您只需执行以下操作:
for lastlast, last, value in triplets(my_sequence): do_something(lastlast, value)
那么,如何编写triplets函数呢?在
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)
或者,如果您只关心序列,而不关心一般的Iterable,并且愿意浪费一些空间来节省一点时间,当然也可以节省一些代码:
def triplets(sequence): return zip(sequence, sequence[1:], sequence[2:])
你不能“操纵迭代器”。但你可以做两件简单的事。在
首先,由于显然是在遍历序列(比如
range
),所以可以使用索引。例如:其次,你只需记住旧的价值观:
^{pr2}$如果您想让第二个更具可读性,您可以很容易地编写一个函数,该函数接受任何iterable并迭代3个值的重叠组,因此您只需执行以下操作:
那么,如何编写
triplets
函数呢?在或者,如果您只关心序列,而不关心一般的Iterable,并且愿意浪费一些空间来节省一点时间,当然也可以节省一些代码:
相关问题 更多 >
编程相关推荐