Python 3.x 在Python中将list插入list时为什么要使用list()方法
所以我想使用Python 3.x 在Python中将list插入list时为什么要使用list()方法,python-3.x,Python 3.x,所以我想使用 coords = [110,50] pos = [[100,50],[90,50],[80,50]] pos.insert(0,coords) 当在for循环中使用时,它没有像我想象的那样工作,但我找到了解决方案: pos.insert(0,list(coords)) 现在,这将在我的pos列表的开头插入coords,但我想知道,当coords本身已经是一个列表时,为什么我必须使用list()方法。这是一个完整的示例代码: coords = [100,50] pos1 = [[
coords = [110,50]
pos = [[100,50],[90,50],[80,50]]
pos.insert(0,coords)
当在for循环中使用时,它没有像我想象的那样工作,但我找到了解决方案:
pos.insert(0,list(coords))
现在,这将在我的pos列表的开头插入coords,但我想知道,当coords本身已经是一个列表时,为什么我必须使用list()方法。这是一个完整的示例代码:
coords = [100,50]
pos1 = [[100,50],[90,50],[80,50]]
pos2 = [[100,50],[90,50],[80,50]]
for i in range(5):
print(i+1)
coords[0] += 10
pos1.insert(0,coords)
print ('Pos1: ',pos1)
pos2.insert(0,list(coords))
print ('Pos2: ',pos2)
正如在输出中可以注意到的,pos1和pos2列表是完全不同的
1
Pos1: [[110, 50], [100, 50], [90, 50], [80, 50]]
Pos2: [[110, 50], [100, 50], [90, 50], [80, 50]]
2
Pos1: [[120, 50], [120, 50], [100, 50], [90, 50], [80, 50]]
Pos2: [[120, 50], [110, 50], [100, 50], [90, 50], [80, 50]]
3
Pos1: [[130, 50], [130, 50], [130, 50], [100, 50], [90, 50], [80, 50]]
Pos2: [[130, 50], [120, 50], [110, 50], [100, 50], [90, 50], [80, 50]]
4
Pos1: [[140, 50], [140, 50], [140, 50], [140, 50], [100, 50], [90, 50], [80, 50]]
Pos2: [[140, 50], [130, 50], [120, 50], [110, 50], [100, 50], [90, 50], [80, 50]]
5
Pos1: [[150, 50], [150, 50], [150, 50], [150, 50], [150, 50], [100, 50], [90, 50], [80, 50]]
Pos2: [[150, 50], [140, 50], [130, 50], [120, 50], [110, 50], [100, 50], [90, 50], [80, 50]]
任何人都可以解释一下插入coords和列表(coords)时有什么区别吗?插入coords效果很好,但每次都插入相同的列表对象。因此,您的循环只是向同一个列表添加了许多引用,当您执行
coords[0]+=10
时,该列表会发生更改,并且您可以在pos1中看到到处都反映的更改
使用list(coords)
对coords进行复制,因此它是一个包含相同值的新列表,更改原始列表不会更改副本
coords[:]
也是制作列表副本的常用方法。插入coords效果很好,但每次都插入相同的列表对象。因此,您的循环只是向同一个列表添加了许多引用,当您执行coords[0]+=10
时,该列表会发生更改,并且您可以在pos1中看到到处都反映的更改
使用list(coords)
对coords进行复制,因此它是一个包含相同值的新列表,更改原始列表不会更改副本
coords[:]
也是制作列表副本的常用方法。非常感谢您的回答!我想不出来,但现在有道理了。非常感谢你的回答!我想不出来,但现在它说得通了。