2014-11-04 191 views
1

你能重置迭代器嗎?或者有沒有一種方法可以保存下一個元素而不需要迭代它呢?Python迭代器:重置迭代器?

+0

您的例子是不明確的,你說的「terator誰比之前和之後的元素更大。」你基於它計算的元素是什麼,元素是在它之前還是之後。 – user3378649 2014-11-04 23:58:35

回答

1

它讓我想起最後兩個元素的小緩衝區保存在兩個單獨的變量中,一個元組,一個列表等,並與迭代器中的當前元素進行比較。

+0

如何在不調用next()的情況下獲取下一個元素和前一個元素? – Rimoun 2014-11-05 00:15:23

0

通過排除元素位於邊緣(頭部,尾部)的情況,我們通過比較每個元素與前導/後繼來遍歷元素,如果它正在驗證條件,我們將它添加到列表中。

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] 
+0

問題是我不能讓x列表。 X是一個迭代器。 next(x)= 0,next(x)= 1,next(x)= - 1,next(x)= 3 ....同樣對於頭部和尾部,他們只會考慮它們的一側,端端將永遠是真實的。 – Rimoun 2014-11-05 00:13:58

3

您可以使用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]