Python 如何使用生成器同时创建多个阵列?

Python 如何使用生成器同时创建多个阵列?,python,generator,Python,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: 如果你想要更长但更清晰的东西,你可以建造一个发电机: def g(a, b, index): for i in index:

假设我们有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:

如果你想要更长但更清晰的东西,你可以建造一个发电机:

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))
如果希望c和d成为列表,可以使用map:

如果你想要更长但更清晰的东西,你可以建造一个发电机:

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

我将使用zip和元组展开*

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

在这里,它使用生成器表达式中的zip将a[i]和b[i]成对展开。

为什么不使用for?为什么不使用?不可能有任何计算优势,这只会使代码的操作更难理解。为什么不使用for?为什么要,这不太可能有任何计算优势,只会使代码的操作更难理解。我赞成这个答案,但应该注意的是,由于目前的方法很难掌握,所以最好明确地完成这些事情。@go2nirvana感谢您的评论。我有点同意,但同时我非常习惯函数方法,我觉得它非常直观。当然,可能不是每个人都这样,我同意。你所做的很像蟒蛇。我也喜欢函数式编程。但对于我看来如此简单的任务来说,这真的有点令人困惑:@go2nirvana Agree!我赞成这个答案,但应该注意的是,这些事情应该明确地做,因为目前的方法很难掌握。@go2nirvana感谢您的评论。我有点同意,但同时我非常习惯函数方法,我觉得它非常直观。当然,可能不是每个人都这样,我同意。你所做的很像蟒蛇。我也喜欢函数式编程。但对于我看来如此简单的任务来说,这真的有点令人困惑:@go2nirvana Agree@RicardoBucco以+1击败了我,我也在iPhone safari中,它没有显示实时答案updates@RicardoBucco快告诉我+1,我也在iPhone safari中,它不显示实时答案更新