Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列表插入同一列表时使用省略号_Python_List_Insert - Fatal编程技术网

Python 将列表插入同一列表时使用省略号

Python 将列表插入同一列表时使用省略号,python,list,insert,Python,List,Insert,当我遇到这个问题时,我正试图找到一个问题的答案。我试图使用insert将一个列表插入到同一个列表中。但是我得到了一个新列表应该在哪里的… 插入相同的列表 layer1 = [1,2,3,4] layer1.insert(len(layer1)//2,layer1) 奇怪的是,我得到了输出 [1, 2, [...], 3, 4] 插入唯一列表 layer1 = [1,2,3,4] layer1.insert(len(layer1)//2,layer1) 现在假设我在层1中插入一个唯一的列表

当我遇到这个问题时,我正试图找到一个问题的答案。我试图使用insert将一个列表插入到同一个列表中。但是我得到了一个新列表应该在哪里的

插入相同的列表

layer1 = [1,2,3,4]
layer1.insert(len(layer1)//2,layer1)
奇怪的是,我得到了输出

[1, 2, [...], 3, 4]

插入唯一列表

layer1 = [1,2,3,4]
layer1.insert(len(layer1)//2,layer1)
现在假设我在
层1
中插入一个唯一的列表

layer1 = [1,2,3,4]
layer2 = [1,2]
layer1.insert(len(layer1)//2,layer2)
print(layer1)
我的输出与预期一样,没有

[1, 2, [1, 2, 3], 3, 4]

所需输出

layer1 = [1,2,3,4]
layer1.insert(len(layer1)//2,layer1)
如何使用
insert

[1, 2, [1, 2, 3, 4], 3, 4]

当您将[1,2,3,4]插入自身时,您真正拥有的是:

layer1 = [1, 2, layer1, 3, 4]
如果您“打开”第1层(点)以查看其中的内容,您将得到:

layer1 = [1, 2, [1, 2, layer1, 3, 4], 3, 4]
正如你所看到的,这将永远持续下去。这个列表是“自我参照的”,它指的是它自己

相反,您需要制作列表的副本

layer1 = [1,2,3,4]
layer1.insert(len(layer1)//2,layer1.copy())

您正在通过将列表插入自身来创建自引用列表。它就像一个
while(1)
没有任何
中断

也许你可以用它来实现你的目标:

layer1 = [1,2,3,4]
layer1.insert(len(layer1)//2,layer1[:])
省略的原因 您正试图在位置2(
len(layer1)//2
)将对象插入自身。可以将(…)视为指向对象本身的指针。

str/repr函数已对此进行了保护,以避免无限递归,并显示省略号(…)。参考

无法打印通过插入自身而修改的对象,因为它将进入无限递归。想想看,如果您通过插入自身来修改列表,您所指的新更新列表也将插入自身,因为您只指向对象

如果尝试访问列表中的省略号对象,这一点就会变得明显-

layer1 = [1,2,3,4]
layer1.insert(len(layer1)//2,layer1)
print('list:',layer1)
print('ellipsis:', layer1[2])
原始列表中的任何更新也必须反映在插入的项目中,反之亦然。因此,它显示为省略号


解决打印问题 解决此问题的一种方法是使用副本-

layer1 = [1,2,3,4]
layer1.insert(len(layer1)//2,layer1[:]) #<--- slicing returns copy
layer1
细节