首页 > 解决方案 > 将列表插入同一列表时的省略号

问题描述

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

插入相同的列表

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

奇怪的是,我得到了输出

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

插入唯一列表

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

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

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

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

期望的输出

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

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

标签: pythonlistinsert

解决方案


省略号的原因

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

str / repr函数已受到保护以避免无限递归,并显示省略号(...)。参考这个

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

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

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

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


解决打印问题

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

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

详情在这里


推荐阅读