你能重置迭代器嗎?或者有沒有一種方法可以保存下一個元素而不需要迭代它呢?Python迭代器:重置迭代器?
回答
它讓我想起最後兩個元素的小緩衝區保存在兩個單獨的變量中,一個元組,一個列表等,並與迭代器中的當前元素進行比較。
如何在不調用next()的情況下獲取下一個元素和前一個元素? – Rimoun 2014-11-05 00:15:23
通過排除元素位於邊緣(頭部,尾部)的情況,我們通過比較每個元素與前導/後繼來遍歷元素,如果它正在驗證條件,我們將它添加到列表中。
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]
問題是我不能讓x列表。 X是一個迭代器。 next(x)= 0,next(x)= 1,next(x)= - 1,next(x)= 3 ....同樣對於頭部和尾部,他們只會考慮它們的一側,端端將永遠是真實的。 – Rimoun 2014-11-05 00:13:58
您可以使用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]
- 1. 迭代器的迭代器
- 2. STL迭代器重置
- 3. 重置csv.reader()迭代器
- 4. 迭代函數的Python迭代器
- 5. 迭代器在Python
- 6. 輸入迭代器+輸出迭代器+ X =前向迭代器
- 7. C++ - 迭代器迭代器不編譯
- 8. 異類迭代器的C++迭代器
- 9. PHP迭代器像mysql迭代器?
- 10. Python列表迭代器的行爲和未來(迭代器)
- 11. 在Python中,如何迭代一個迭代器,然後迭代另一個迭代器?
- 12. Python - 重複迭代器兩次
- 13. Python 3中的迭代器
- 14. python:函數的迭代器
- 15. 迭代器在Python字典
- 16. Python 3,增量迭代器
- 17. Python迭代器異常
- 18. Python懶惰迭代器
- 19. Python中,行迭代器
- 20. 迭代器的Python遞歸
- 21. 有效的或無效的迭代器和迭代器位置
- 22. List Comprehension重置迭代器變量?
- 23. 如何重置java中的迭代器?
- 24. 重置迭代器與擦除方法
- 25. 重置計時器的每次迭代
- 26. 迭代器postgreslql
- 27. 迭代器類
- 28. Java:迭代器
- 29. C++迭代器
- 30. 迭代器中的迭代器在樹型集合中的迭代器
您的例子是不明確的,你說的「terator誰比之前和之後的元素更大。」你基於它計算的元素是什麼,元素是在它之前還是之後。 – user3378649 2014-11-04 23:58:35