繁体   English   中英

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

[英]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]。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM