如何使用生成器同时创建多个数组?

How can I create more than one array at the same time using a generator?

假设我们有 3 个数组,索引 a 和 b。如何创建仅通过索引一次的数组 c 和 d?

c = [a[i] for i in index]
d = [b[i] for i in index]

有没有办法用一个生成器创建这些数组?

您可以使用zip函数:

c, d = zip(*((a[i], b[i]) for i in index))

如果您希望 cd 成为列表,您可以使用 map:

c, d = map(list, zip(*((a[i], b[i]) for i in index)))

如果你想要更长的东西(但可能更清晰),你可以构建一个生成器:

def g(a, b, index):
    for i in index:
        yield a[i], b[i]

c, d = zip(*g(a, b, index))

我将使用带元组扩展的 zip *

c,d = zip(*((a[i],b[i]) for i in index))

这里它使用生成器表达式中的 zip 成对扩展了 a[i] 和 b[i]。