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

标签 python

我正在检查生成器,如果需要特别注意,确定当前元素是生成器的第一个元素还是最后一个元素的 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/

相关文章:

python - 如何使用 Materialise 和 WTForms 创建单选按钮?

python - 应用具有两个不同列表的公式

Python Matplotlib 和 MySQL 以及 Ginput

python - 如何设置和使用 python 审计 Hook

python - 了解变量类型、名称和赋值

python - 从主 PyQt 窗口启动 PyQT 窗口,并获取用户输入?

python - 为什么打印带有 unicode 字符的文件不会生成表情符号?

python - 如何使用 python 编程使用 opencv 缩放罗技网络摄像头 c930e?

python - 导入错误 : No module named boto. ec2.autoscale

python - 使用 Python 在 txt 文件中查找 csv 值的问题