你能重置迭代器吗?或者有没有一种方法可以保存下一个元素而不需要迭代它呢?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. 重置csv.reader()迭代器
- 3. 迭代函数的Python迭代器
- 4. Python - 重复迭代器两次
- 5. Python懒惰迭代器
- 6. 迭代器的Python递归
- 7. 迭代器在Python字典
- 8. Python迭代器异常
- 9. List Comprehension重置迭代器变量?
- 10. 如何重置java中的迭代器?
- 11. 迭代器postgreslql
- 12. Java:迭代器
- 13. 迭代器中的迭代器在树型集合中的迭代器
- 14. 分享迭代器是否可迭代?
- 15. 迭代与自动ref或迭代器
- 16. 调用迭代器迭代对象
- 17. 迭代器只能迭代一次吗?
- 18. 推迭代迭代器混合使用
- 19. 如何迭代使用迭代器
- 20. 迭代器中迭代遍历控件
- 21. 通过python中的xmltree迭代器迭代时的空输出
- 22. 迭代器上的Python多处理器
- 23. Python中的迭代器选择器
- 24. C++流迭代器VS容器迭代器
- 25. 迭代器接口
- 26. 迭代器种类
- 27. 展平迭代器
- 28. 的迭代器块
- 29. 检查迭代器
- 30. 问题迭代器
您的例子是不明确的,你说的“terator谁比之前和之后的元素更大。”你基于它计算的元素是什么,元素是在它之前还是之后。 – user3378649 2014-11-04 23:58:35