首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python迭代器:重置迭代器?

Python迭代器:重置迭代器?
EN

Stack Overflow用户
提问于 2014-11-05 07:50:42
回答 3查看 7K关注 0票数 1

你能重置迭代器吗?或者,有没有一种方法可以保存下一个元素,而不需要迭代它?

EN

回答 3

Stack Overflow用户

发布于 2014-11-05 08:15:53

您可以使用itertools.tee来“记住”迭代器的先前值

代码语言:javascript
运行
复制
>>> from itertools import tee, izip
>>> it = iter([0,1,-1,3,8,4,3,5,4,3,8])
>>> it1, it2, it3 = tee(it, 3)
>>> next(it2)
0
>>> next(it3)
0
>>> next(it3)
1
>>> [j for i, j, k in izip(it1, it2, it3) if i < j > k]
[1, 8, 5]
票数 3
EN

Stack Overflow用户

发布于 2014-11-05 08:07:04

我想到了在两个独立的变量中保留最后两个元素的一个小缓冲区,元组,列表等,并与迭代器中的当前元素进行比较。

票数 1
EN

Stack Overflow用户

发布于 2014-11-05 08:07:13

通过排除元素处于边缘(头部、尾部)的情况,我们通过将每个元素与前置/后继进行比较来遍历该元素,如果它正在验证条件,则将其添加到列表中。

代码语言:javascript
运行
复制
x= [0,1,-1,3,8,4,3,5,4,3,8]

s= [ x[i] for i in xrange(1,len(x)-2) if x[i-1]< x[i] and x[i]> x[i+1] ]

print s  #Output: [1, 8, 5]

更新

在本例中,我们将使用while循环到iter中,每次我们将数据存储到三个变量left,middle,right中。每当我们调用下一个变量时,我们从中间向左移动,从最后移动到中间,并将下一个新值存储在最后。

代码语言:javascript
运行
复制
l= iter([0,1,-1,3,8,4,3,5,4,3,8])

res= []

left,middle,last= l.next(),l.next(),l.next() #Initialize data, we assume that we have at least 3 items, otherwise, we will get exception

while  True:
    try:
        if left<middle and middle>last: # I made first, to check in case we got that case in the first three items
            res+=[middle]
        left=middle
        middle= last
        last= l.next()
    except StopIteration:
        break

print res #Output: [1, 8, 5]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26747296

复制
相关文章

相似问题

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