我昨天问了一些类似的问题 [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/