Python 从生成器项中获取最后一个元素

mar*_*345 5 python

我对使用生成器而不是列表感到非常惊讶。但我找不到这个问题的任何解决方案。

从生成器项中获取第一个和最后一个元素的有效方法是什么?因为使用列表我们可以只执行 lst[0] 和 lst[-1]

谢谢您的帮助。我无法提供任何代码,因为很明显这正是我想知道的:)

fla*_*kes 8

你必须迭代整个事情。假设你有这个生成器:

def foo():
    yield 0
    yield 1
    yield 2
    yield 3
Run Code Online (Sandbox Code Playgroud)

获取第一个和最后一个值的最简单方法是将生成器转换为列表。然后使用列表查找访问值。

data = list(foo())
print(data[0], data[-1])
Run Code Online (Sandbox Code Playgroud)

如果您想避免创建容器,可以使用 for 循环来耗尽生成器。

gen = foo()
first = last = next(gen)
for last in gen: pass

print(first, last)
Run Code Online (Sandbox Code Playgroud)

注意:当生成器没有生成任何值时,您需要特殊情况。

  • 这很棒。因为我不想将它们转换为列表,所以first=last=next(gen) 就是我正在寻找的。我尝试过并且成功了。非常感谢 (2认同)