我正在检查生成器,如果需要特别注意,确定当前元素是生成器的第一个元素还是最后一个元素的 Pythonic 方法是什么?
谢谢
基本上生成标签,所以我有类似的项目
<div class="first">1</div>
<div>...</div>
<div class="last">n</div>
所以我想让最后一项保持循环?
最佳答案
这是一个类似枚举的生成器,它跳过了前面的一个;它为最后一个元素返回 -1。
>>> def annotate(gen):
... prev_i, prev_val = 0, gen.next()
... for i, val in enumerate(gen, start=1):
... yield prev_i, prev_val
... prev_i, prev_val = i, val
... yield '-1', prev_val
>>> for i, val in annotate(iter(range(4))):
... print i, val
...
0 0
1 1
2 2
-1 3
它无法判断传递给它的生成器是否“新鲜”,但它仍然会告诉您何时接近尾声:
>>> used_iter = iter(range(5))
>>> used_iter.next()
0
>>> for i, val in annotate(used_iter):
... print i, val
...
0 1
1 2
2 3
-1 4
一旦迭代器用完,它会照常引发 StopIteration
。
>>> annotate(used_iter).next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in annotate
StopIteration
关于确定当前元素是生成器的第一个元素还是最后一个元素的 Pythonic 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5983265/