这个问题已经在这里有一个答案:
- 可以迭代器在Python被重新设定? 14个回答
您可以重置迭代器? 还是有办法救下一个元素,而无需通过它迭代?
这个问题已经在这里有一个答案:
您可以重置迭代器? 还是有办法救下一个元素,而无需通过它迭代?
您可以使用itertools.tee
“记住”一个迭代的先前值
>>> 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]
它出现在我的脑海,保持最后两个元素的一个小缓冲区在两个独立的变量,元组,列表等,并与迭代器中当前元素进行比较。
通过排除情况下,该元素是在边缘(头,尾),我们通过每一个元素比较前作/后继横贯元件,如果它验证的标准,我们把它添加到列表中。
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]
UPDATE
在这种情况下,我们会使用while
循环到ITER,每一次我们店里datat分为三个变量左,中,右。 每当我们所说的下一个变量,我们中间转移到左,最后以中,存储在过去的下一个新的价值。
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]