Pythonic确定当前元素是否是生成器的第一个或最后一个元素的方法?

Tim*_*mmy 4 python

我正在经历一个生成器,为什么他们需要特别小心,以Pythonic方式确定当前元素是否是生成器的第一个或最后一个元素?

谢谢

基本上生成标签,所以我有像

<div class="first">1</div>
<div>...</div>
<div class="last">n</div>
Run Code Online (Sandbox Code Playgroud)

所以我想保持循环中的最后一项?

sen*_*rle 5

这是一个类似枚举的生成器,可以向前跳过一个; 它为最后一个元素返回-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
Run Code Online (Sandbox Code Playgroud)

它无法判断传递给它的发电机是否"新鲜",但它仍然告诉你何时结束:

>>> 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
Run Code Online (Sandbox Code Playgroud)

一旦迭代器用完,它会StopIteration像往常一样升起.

>>> annotate(used_iter).next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in annotate
StopIteration
Run Code Online (Sandbox Code Playgroud)