python函数产生元组,只需要一个元素

nos*_*nos 5 python yield tuples generator

我有一个功能

def f():
    # whatever
    yield (a,b)
Run Code Online (Sandbox Code Playgroud)

现在我想收集所有a但不是b.我也希望结果aa是一个列表而不是迭代器.现在我用

aa, _ = zip(*f())
Run Code Online (Sandbox Code Playgroud)

这是空间/时间效率方面最好的吗?

Mar*_*ers 8

zip(*seq)在输出列之前必须摄取整个生成器.这效率不高.

坚持列表理解.你可以使用元组赋值:

aa = [a for a, _ in f()]
Run Code Online (Sandbox Code Playgroud)

或使用索引:

aa = [tup[0] for tup in f()]
Run Code Online (Sandbox Code Playgroud)

如果你不具备有可用于随机访问或其他操作的所有值必须有一个列表,你可以使用一个生成器表达式来维持记忆的效率:

aa = (a for a, _ in f())
Run Code Online (Sandbox Code Playgroud)