list.append()似乎无法正常工作

时间:2015-11-10 14:13:22

标签: python list function append coordinates

我创建了一个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()

4 个答案:

答案 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对用户的使用。