【问题标题】:Concatenate two single-dimension list to get one multi-dimensional list连接两个单维列表得到一个多维列表
【发布时间】:2019-07-11 14:22:37
【问题描述】:

对于我的应用程序范围,我需要将两个一维数组连接成一个多维数组,两者都使用(最终嵌套)lists 在 Python 中实现。连接必须打印第一个数组的元素与第二个数组的元素之间的所有可能组合。

vectA=[124,172,222,272,323,376,426,479,531]
vectB=[440,388,336,289,243,197,156,113,74]

预期结果是一个多维数组,其中包含vectA所有 元素的组合vectB(笛卡尔积)。

output=[[124,440],[124,388],[124,336],[124,289]...[172,440],[172,388]...]

【问题讨论】:

  • 您好,欢迎来到 SO。你试过什么没用?这实际上是一件非常非常简单的事情,所以我不确定我是否理解您的问题......
  • 通常,在 Python 中,这些被称为 list 而不是 arrays。请查看numpy,了解 Python 中用于数组操作的高性能和事实上的标准库。

标签: python python-3.x list nested-lists cartesian-product


【解决方案1】:

这里不需要导入包。

您也可以使用简单的list comprehensions 来做到这一点:

vectA = [124, 172, 222, 272, 323, 376, 426, 479, 531]
vectB = [440, 388, 336, 289, 243, 197, 156, 113, 74]

output = [[a, b] for a in vectA for b in vectB]
print(output)

另外,我建议输出tuples 的列表,而不是列表:

output = [(a, b) for a in vectA for b in vectB]

给你:[(124, 440), (124, 388), (124, 336), ... , (531, 74)]

在我看来,使用元组会更清楚地向其他人传达您将 vectA 的所有值与 vectB 的所有值配对的意图。

你仍然可以做例如output[0] 获取 (124, 440)output[0][0] 获取 124,就像使用列表列表一样。

但请注意,您可以像使用列表的值那样覆盖元组的值,因为元组是不可变的。

【讨论】:

    【解决方案2】:

    使用itertools.product:

    from itertools import product
    
    vectA=[124,172,222,272,323,376,426,479,531]
    vectB=[440,388,336,289,243,197,156,113,74]
    
    output = list(product(vectA,vectB))
    output = [list(i) for i in output]
    print(output)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      相关资源
      最近更新 更多