有没有办法在python中的特定索引处附加/扩展带有另一个列表的列表?

MrD*_*Duk 9 python list

换句话说,我想完成以下内容:

a = [1, 2, 3, 7, 8]
b = [4, 5, 6]
# some magic here to insert list b into list a at index 3 so that
a = [1, 2, 3, 4, 5, 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)

iCo*_*dez 12

您可以分配到片名单a如下所示:

>>> a = [1, 2, 3, 7, 8]
>>> b = [4, 5, 6]
>>> a[3:3] = b
>>> a
[1, 2, 3, 4, 5, 6, 7, 8]
>>>
Run Code Online (Sandbox Code Playgroud)

该[3:3]可能看起来不可思议,但有必要在列表中的项目b被插入到表a正确.否则,如果我们要分配索引a,b则会插入列表本身:

>>> a = [1, 2, 3, 7, 8]
>>> b = [4, 5, 6]
>>> a[3] = b
>>> a
[1, 2, 3, [4, 5, 6], 8]
>>>
Run Code Online (Sandbox Code Playgroud)

我试图找到明确提到这种行为的文档链接,但是没有成功(如果你能找到它,请随意添加一个).所以,我只是说,a[3:3] = b告诉Python将列表中的项目放入b并将它们放在a表示的列表部分中[3:3].此外,Python将a根据需要扩展列表以适应此操作.

简而言之,这只是Python的另一个很棒的功能.:)

  • 问"为什么"这个有用吗?我的意思是,直觉上,如果我们采用数组隐喻,这应该不起作用,因为在一个元素和另一个元素之间没有"空格"来添加N个元素.显然,python以一种可以实现这一目的的方式实现列表,但是我问:"规范中有什么东西允许我们_predict_这应该有用吗?" (否则它将是一个黑客攻击).+1! (3认同)
  • 本教程中的文档提到了这一点,请参见[此处](https://docs.python.org/2/tutorial/introduction.html#lists)).他们没有准确地表明'a [3:3] = b`会起作用,但是他们会显示`a [2:5] = []`通过删除中间的元素来修改列表的长度,所以我' d期望能够插入它们.他们*明确表示允许修改大小(并且他们从不提到你只能在最后做到这一点,实际上例子是在中间分配). (3认同)