将列表插入同一列表时的省略号

Bud*_*Bob 2 python list insert

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

插入相同的列表

layer1 = [1,2,3,4]
layer1.insert(len(layer1)//2,layer1)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我得到了输出

[1, 2, [...], 3, 4]
Run Code Online (Sandbox Code Playgroud)

插入唯一列表

现在说我将一个唯一的列表插入到layer1.

layer1 = [1,2,3,4]
layer2 = [1,2]
layer1.insert(len(layer1)//2,layer2)
print(layer1)
Run Code Online (Sandbox Code Playgroud)

我的输出符合预期,没有 ...

[1, 2, [1, 2, 3], 3, 4]
Run Code Online (Sandbox Code Playgroud)

期望输出

我怎么能得到这个输出使用 insert

[1, 2, [1, 2, 3, 4], 3, 4]
Run Code Online (Sandbox Code Playgroud)

Aks*_*gal 6

省略号的原因

您正试图将对象插入到位置 2 ( len(layer1)//2) 处。您可以将省略号(...) 视为指向对象本身的指针。

STR /再版功能已得到保护,免受会造成死循环,并显示一个省略号代替(...)。参考这个

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

如果您尝试访问列表中的省略号对象,这将变得很明显 -

layer1 = [1,2,3,4]
layer1.insert(len(layer1)//2,layer1)
print('list:',layer1)
print('ellipsis:', layer1[2])
Run Code Online (Sandbox Code Playgroud)
list: [1, 2, [...], 3, 4]
ellipsis: [1, 2, [...], 3, 4]
Run Code Online (Sandbox Code Playgroud)

原始列表中的任何更新也必须反映在插入的项目中,反之亦然。因此,它显示为省略号。


解决打印

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

layer1 = [1,2,3,4]
layer1.insert(len(layer1)//2,layer1[:]) #<--- slicing returns copy
layer1
Run Code Online (Sandbox Code Playgroud)
[1, 2, [1, 2, 3, 4], 3, 4]
Run Code Online (Sandbox Code Playgroud)

详情请看这里