Python:将一个列表的列表插入到另一个列表的列表中

9
我将翻译以下列表:

我想使用以下列表:

matrix1 = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
]

matrix2 = [
[A, B, C, D],
[E, F, G, H]
]

将它们合并为:
new_matrix = [
[A, B, C, D],
[E, F, G, H],
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
]

我似乎找不到一个好的方法。插入()将整个列表放入,导致成为列表的列表的列表。如有建议,敬请赐教!

5个回答

9

只需添加它们!

new_matrix = matrix1 + matrix2

我感觉很愚蠢。谢谢 :) - user2238685

3

使用+将它们相加:

In [59]: new_matrix = matrix2 + matrix1

In [60]: new_matrix
Out[60]: 
[['A', 'B', 'C', 'D'],
 ['E', 'F', 'G', 'H'],
 [1, 2, 3, 4],
 [5, 6, 7, 8],
 [9, 10, 11, 12]]

2

使用extend,它会将另一个列表中的元素添加到当前列表末尾,而不是将其插入到列表中。

>>> matrix2.extend(matrix1)

然而,这将直接在原有列表上进行更改,而不是创建一个新的列表,这可能并非您所希望的。如果您想创建一个新的列表,则需要使用+

2
值得注意的是,尽管这是正确的,但 OP 显示了一个持有值的新变量,而这个修改则是就地修改列表。显然取决于想要哪个。+1 - Gareth Latty
@Lattyware 谢谢您的指出。我已更新答案以澄清这一点。 - Meitham

0

只需要使用+运算符

>>> a = [[1],[2],[3]]
>>> b = [[4],[5],[6]]
>>> a+b
[[1], [2], [3], [4], [5], [6]]
>>> 

0

许多列表的通用解决方案:

要么:

new_matrix = list(itertools.chain(matrix1, matrix2, matrix3, ...)

或者:

new_matrix = sum(matrix1, matrix2, matrix3, ..., default=[])

或者使用列表的列表:

new_matrix = list(itertools.chain(*matrices)

或者:

new_matrix = sum(*matrices, default=[])

1
-1,sum()的文档明确建议不要使用此用法。更好的解决方案是itertools.chain() - Gareth Latty
@Lattyware:请指出在想要list作为最终结果的情况下,哪一部分建议不这样做?OP并没有要求可迭代对象,对吧? - Wolph
@Lattyware:你更喜欢list(itertools.chain(*matrices))吗? - Wolph
是的,列表和其他可迭代对象一样,可以使用itertools.chain()更好地处理它。至于取出列表,正如您所说,将其转换为列表很容易——如果有必要的话。 - Gareth Latty
@Lattyware:我重复这个问题,哪里说过如果你想要制作一个列表,就建议使用 itertools.chain 而不是 sum?它说有好的替代方法,并不意味着前者是错误的... - Wolph
它可能没有明确说明,但问题在于这是一种非常低效的方法。在列表上使用sum()意味着在其中制作大量列表(每个部分列表),这相对较慢(请记住Python的列表不是链接列表)。使用itertools.chain()是一个更高效的解决方案。 - Gareth Latty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接