如何在python中操作for循环中的迭代器?
如果我试图在一个很小的范围内移动,并且想要引用在迭代的早期步骤中创建的变量,我如何引用它 如果我使用范围为2,6的for循环,在第一次迭代中我创建了两个变量a[I]和b[I],那么在第四次或第五次迭代中是否可以引用a3?或者类似剂量的东西(a[i-1],a[i]) 为糟糕的psuedo代码道歉。您不能“操纵迭代器”。但你可以做两件简单的事 首先,由于您显然是在序列上进行迭代(如如何在python中操作for循环中的迭代器?,python,python-2.7,Python,Python 2.7,如果我试图在一个很小的范围内移动,并且想要引用在迭代的早期步骤中创建的变量,我如何引用它 如果我使用范围为2,6的for循环,在第一次迭代中我创建了两个变量a[I]和b[I],那么在第四次或第五次迭代中是否可以引用a3?或者类似剂量的东西(a[i-1],a[i]) 为糟糕的psuedo代码道歉。您不能“操纵迭代器”。但你可以做两件简单的事 首先,由于您显然是在序列上进行迭代(如范围),因此可以使用索引。例如: for i, value in enumerate(my_sequence):
范围
),因此可以使用索引。例如:
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
函数呢
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)
或者,如果您只关心序列,而不是一般的iterables,并且愿意浪费一些空间来节省一点时间,当然也可以节省一点代码:
def triplets(sequence):
return zip(sequence, sequence[1:], sequence[2:])
如果你给出一个具体的例子,用有意义的名字和实际的代码,会更好。它不仅可以帮助其他有类似问题的人找到你的问题并从任何答案中获益,还可以让你更容易理解答案。@PM2Ring:谢谢,但是……你没有足够的代表自己编辑它吗?我想是的,但可以说,我不想踩你的脚。但将来我会的!:)我只是新来的&仍然习惯于这个地方的运作方式…@PM2Ring:如果你有足够的代表来实际编辑,你肯定应该修复像那样重要的打字错误;任何一个感到恼火的人都没有抓住这一点。但是,如果您只有足够的代表建议进行编辑,请更加小心。建议的编辑必须经过审查队列,人们对大量的小编辑感到恼火,甚至可能拒绝它们,即使它们很重要。(不管怎样,我不知道你在这里被人认识,你似乎更有经验。我差点说“对不起”,但我想这不是什么值得道歉的事。:)我是新来的,但我已经编程几十年了…:)
def triplets(sequence):
return zip(sequence, sequence[1:], sequence[2:])