我创建了一个python函数,它应该采用一系列3D坐标并将它们放在一个列表中(在列表中)。
但是,当我打印coord_list
时,它似乎没有正确追加,例如输入这些坐标时:
[1,2,3]
[2,3,4]
[3,4,5]
最终coord_list的输出(忽略' q')将是:[[3,4,5],[3,4,5],[3,4,5]]
。
为什么它没有正确追加,如何解决?
def coords() :
xyz_list = []
coord_list = []
while 1 :
xyz = raw_input("Enter co-ordinates (x,y,z) enter 'q' when done: ")
xyz = str(xyz)
del xyz_list[:]
for num in xyz.split(","):
xyz_list.append(num)
print xyz_list
if xyz[0] != 'q' :
coord_list.append(xyz_list)
print coord_list
else :
break
coords()
答案 0 :(得分:2)
这是因为coord_list
正在存储[xyz_list, xyz_list, ...]
。您正在每次迭代中更新xyz_list
,而coord_list
中会更新 GET_JOURNAL(ReadAndErase As Boolean, FileName As String, ByRef CRC32 As String, ByRef SHA1 As String) As Boolean
。
答案 1 :(得分:1)
问题出在访问托管堆的del
。新对象(xyz_list
的成员)出现在同一位置,因为不会删除包含列表。因此,列表成员就地替换先前的列表成员,coord_list
中的引用将指向新值。
python 2.7.9(Linux)中的再现:
$ python coords.py
Enter co-ordinates (x,y,z) enter 'q' when done: 1,2,3
['1', '2', '3']
[['1', '2', '3']]
Enter co-ordinates (x,y,z) enter 'q' when done: 2,3,4
['2', '3', '4']
[['2', '3', '4'], ['2', '3', '4']]
Enter co-ordinates (x,y,z) enter 'q' when done: 3,4,5
['3', '4', '5']
[['3', '4', '5'], ['3', '4', '5'], ['3', '4', '5']]
我对脚本做了一些小改动:del xyz_list[:]
- > xyz_list = []
。
现在可行:
$ python coords.py
Enter co-ordinates (x,y,z) enter 'q' when done: 1,2,3
['1', '2', '3']
[['1', '2', '3']]
Enter co-ordinates (x,y,z) enter 'q' when done: 2,3,4
['2', '3', '4']
[['1', '2', '3'], ['2', '3', '4']]
Enter co-ordinates (x,y,z) enter 'q' when done: 3,4,5
['3', '4', '5']
[['1', '2', '3'], ['2', '3', '4'], ['3', '4', '5']]
答案 2 :(得分:1)
删除del
并在将其添加到xyz_list
后清除列表coord_list
:
def coords() :
xyz_list = []
coord_list = []
while 1 :
xyz = raw_input("Enter co-ordinates (x,y,z) enter 'q' when done: ")
xyz = str(xyz)
for num in xyz.split(","):
xyz_list.append(num)
print xyz_list
if xyz[0] != 'q' :
coord_list.append(xyz_list)
print coord_list
xyz_list = []
else :
break
coords()
输出:
Enter co-ordinates (x,y,z) enter 'q' when done: 1,2,3
['1', '2', '3']
[['1', '2', '3']]
Enter co-ordinates (x,y,z) enter 'q' when done: 4,5,6
['4', '5', '6']
[['1', '2', '3'], ['4', '5', '6']]
答案 3 :(得分:0)
我测试了你的剧本,结果是 [['3','4','5'],['3','4','5'],['3',' 4','5']] 。
如果您想在列表中使用整数,请执行以下操作:
for num in xyz.split(","):
xyz_list.append(int(num))
您可以限制num, num, num
对用户的使用。