Python中将一个列表插入另一个列表的语法是什么?

234

给定两个列表:

x = [1,2,3]
y = [4,5,6]

如何编写语法以:

  1. x插入y,使y现在看起来像[1, 2, 3, [4, 5, 6]]
  2. x的所有项目插入y中,使y现在看起来像[1, 2, 3, 4, 5, 6]

反转列表B,然后执行 [listA.insert(pos,x) for x in [listB]]。 - John Mee
请参考以下帖子:https://dev59.com/t2025IYBdhLWcg3wyI-V - Jos de Kloe
1
@JohnMee 你的意思是 listA.insert(pos, x) for x in listB[::-1] 吗? - wizzwizz4
6个回答

412

你是指append吗?

>>> x = [1,2,3]
>>> y = [4,5,6]
>>> x.append(y)
>>> x
[1, 2, 3, [4, 5, 6]]

或者合并?

>>> x = [1,2,3]
>>> y = [4,5,6]
>>> x + y
[1, 2, 3, 4, 5, 6]
>>> x.extend(y)
>>> x
[1, 2, 3, 4, 5, 6] 

5
那个是否已经就位或生成了一个新实例? - Daniel Möller
13
x.extend(y) 是就地操作,x+y 返回新列表。而 x += y 没有在这里提到,它类似于 extend - wim

133

这个问题并没有清楚地说明你想要实现什么目标。

列表有一个名为append的方法,它可以将其参数附加到该列表中:

>>> list_one = [1,2,3]
>>> list_two = [4,5,6]
>>> list_one.append(list_two)
>>> list_one
[1, 2, 3, [4, 5, 6]]

还有一个extend方法,它可以从你传递的列表中追加

>>> list_one = [1,2,3]
>>> list_two = [4,5,6]
>>> list_one.extend(list_two)
>>> list_one
[1, 2, 3, 4, 5, 6]

当然,还有一个insert方法,它的作用类似于append,但允许您指定插入点:

>>> list_one.insert(2, list_two)
>>> list_one
[1, 2, [4, 5, 6], 3, 4, 5, 6]

要在特定插入点扩展列表,你可以使用列表切片(感谢@florisla):

>>> l = [1, 2, 3, 4, 5]
>>> l[2:2] = ['a', 'b', 'c']
>>> l
[1, 2, 'a', 'b', 'c', 3, 4, 5]

切片操作是相当灵活的,因为它允许用另一个列表的一段来替换列表中的一段:

>>> l = [1, 2, 3, 4, 5]
>>> l[2:4] = ['a', 'b', 'c'][1:3]
>>> l
[1, 2, 'b', 'c', 5]

48
如果你想要“扩展”到特定的插入点,你可以使用列表切片语法(请参见https://dev59.com/h2s05IYBdhLWcg3wNPS7#7376026)。 - florisla
10
@florisla的评论应该被采纳为最佳答案。这是唯一的一种在任意位置(不仅仅是末尾)原地将一个列表插入另一个列表的方法。 - weaver
2
@weaver 虽然这是唯一的解决方案来做那个(在特定索引处扩展),但这不是最初的问题。 - florisla
@florisla 这有点小题大做。 - weaver

35

你如何在数字2后插入一条横线并保持其扁平化? [1,2,4,5,6,3] - DragonKnight
我发现这个代码:foo [2:2] = bar 生成了一个扁平化的列表。我学到了这一点,因为它不是我想要的。 - cmm

6

您也可以只需执行以下操作即可安装:

x += y

这应该是对被接受答案的评论,因为那个答案提到了 x + yx += y 只是在原地完成相同的操作。 - HTNW
我没有足够的声望来做到这一点,但如果其他人可以的话! - user3707850

4
如果您想将列表(list2)中的元素添加到另一个列表(list)的末尾,则可以使用列表的extend方法。
list = [1, 2, 3]
list2 = [4, 5, 6]
list.extend(list2)
print list
[1, 2, 3, 4, 5, 6]

如果您想要连接两个列表,则可以使用+符号。
list3 = list + list2
print list3
[1, 2, 3, 4, 5, 6]

1
如果我们只是做 x.append(y),那么 y 被引用到 x 中,这样对 y 所做的任何更改都会影响到附加的 x。因此,如果我们只需要插入元素,应该按照以下方式进行:

x = [1,2,3] y = [4,5,6] x.append(y[:])


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