首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中的for循环中操作迭代器?

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

Stack Overflow用户
提问于 2014-09-12 04:53:38
回答 1查看 1.1K关注 0票数 0

如果我试图在一个非常小的范围内移动,并且希望引用在迭代的前面一步中创建的变量,我如何引用它?

如果我使用一个范围为2,6的for循环,并且在第一次迭代中我创建了两个变量ai & bi,那么在第4次或第5次迭代中可以引用a3吗?或者类似于doSomething(ai-1,ai)

为可怕的psuedo代码道歉。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-12 04:58:07

你不能“操纵迭代器”。但你可以做两件简单的事。

首先,由于您显然是在迭代序列(如range),所以可以使用索引。例如:

代码语言:javascript
复制
for i, value in enumerate(my_sequence):
    if 3 <= i <= 4:
        old_value = my_sequence[i-2]
        do_something(old_value, value)

其次,您可以只记住旧的值:

代码语言:javascript
复制
lastlast = last = None
for value in my_sequence:
    if lastlast is not None:
        do_something(lastlast, value)
    lastlast, last = last, value

如果您想使第二个函数更易读,您可以非常容易地编写一个函数,该函数可以进行任何迭代,并在三个值的重叠组上迭代,所以您可以这样做:

代码语言:javascript
复制
for lastlast, last, value in triplets(my_sequence):
    do_something(lastlast, value)

那么,如何编写triplets函数呢?

代码语言:javascript
复制
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)

或者,如果您只关心序列,而不是一般的可迭代性,并且愿意浪费一些空间来节省一点时间,并且确实节省了一点代码:

代码语言:javascript
复制
def triplets(sequence):
    return zip(sequence, sequence[1:], sequence[2:])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25800970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档