连接两个单维列表以获得一个多维列表

问题描述 投票:-1回答:2

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

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

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

output=[[124,440],[124,388],[124,336],[124,289]...[172,440],[172,388]...]
python python-3.x list nested-lists cartesian-product
2个回答
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,就像你的列表一样。

但请注意,您不能像列表的值一样覆盖元组的值,因为元组是不可变的。


1
投票

使用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)
© www.soinside.com 2019 - 2024. All rights reserved.