python - 如何编写一个生成器,返回 Python 中 iterable 中的 ALL-BUT-LAST 项?

标签 python

我昨天问了一些类似的问题 [1, 2] 并得到了很好的答案,但我的技术还不够熟练,无法自己编写如此复杂的生成器。

如果它是最后一个项目,我如何编写一个生成器来引发 StopIteration,而不是产生它?

我想我应该以某种方式一次询问两个值,然后查看第二个值是否为 StopIteration。如果是,那么我应该引发此 StopIteration,而不是产生第一个值。但不知何故,我还应该记得我询问的第二个值是否不是 StopIteration。

我自己也不知道怎么写。请帮忙。

例如,如果可迭代对象是 [1, 2, 3],那么生成器应该返回 1 和 2。

谢谢,Boda Cydo。

[1] How do I modify a generator in Python?

[2] How to determine if the value is ONE-BUT-LAST in a Python generator?

最佳答案

这应该可以解决问题:

def allbutlast(iterable):
    it = iter(iterable)
    current = it.next()
    for i in it:
        yield current
        current = i


>>> list(allbutlast([1,2,3]))
[1, 2]

这将遍历整个列表,并返回前一项,因此永远不会返回最后一项。
请注意,在 [] 和 [1] 上调用上面的方法将返回一个空列表。

关于python - 如何编写一个生成器,返回 Python 中 iterable 中的 ALL-BUT-LAST 项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2425096/

相关文章:

python - 在常见的实现中,realloc 实际上会缩小缓冲区吗?

python selenium清除缓存和cookie

python - 适用于 Python 3.4 的 Microsoft Visual C++ 编译器

python - 040和40的区别

python - 如果每行包含不同数量的字段(数量很大),如何正确读取 csv 文件?

python - 木星 |如何旋转 3D 图形

python - 如何在 python 中解压键值对?

Python:循环遍历目录并使用文件名作为数据框名称保存每个文件

python - 在树莓派上自动运行命令

python - 接收 "TypeError: the JSON object must be str, bytes or bytearray, not dict"