如何使用生成器同时创建多个数组?
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))
如果您希望 c
和 d
成为列表,您可以使用 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]。
假设我们有 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))
如果您希望 c
和 d
成为列表,您可以使用 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]。