Python:追加列表中已经存在的列表元素
我想从list1=[[x]]转到list2=[[x],[x,2]]。list2的第二个元素应该从第一个元素创建。我试过这个:Python:追加列表中已经存在的列表元素,python,list,Python,List,我想从list1=[[x]]转到list2=[[x],[x,2]]。list2的第二个元素应该从第一个元素创建。我试过这个: list1 = [[1]] list1.append(list1[0]) list1[1].append(2) list2 = list1 但这导致: list2=[[1, 2], [1, 2]] 而不是我真正想要的: list2=[[1], [1, 2]] 如我所愿 我想这是因为当我附加list1[0]时,这不是list1[0]的副本,但是list1的索引1仍然指
list1 = [[1]]
list1.append(list1[0])
list1[1].append(2)
list2 = list1
但这导致:
list2=[[1, 2], [1, 2]]
而不是我真正想要的:
list2=[[1], [1, 2]]
如我所愿
我想这是因为当我附加list1[0]时,这不是list1[0]的副本,但是list1的索引1仍然指向同一个对象
我怎样才能避开这个问题呢?这是python 2还是python 3?您必须实际复制该列表,否则只需添加一个引用 Python 2:
list1 = [[1]]
list1.append(list(list1[0]))
list1[1].append(2)
或list.copy已明确添加到版本3.3中:
list1 = [[1]]
list1.append(list1[0].copy())
list1[1].append(2)
你可以做:
>>> lis=[[1]]
>>> lis
[[1]]
>>> lis.append([lis[0][0],2])
>>> lis
[[1], [1, 2]]
您的list1.appendlist1[0]行将list1的第0个元素(列表对象)的别名附加到其自身。现在,列表1在内存中看起来像这样:
[1] <-----+
^ |
| |
[index 0, index 1]
最后,为整个结构添加另一个引用:list2=list1
结果如下:
[1,2] <---+
^ |
| |
list1: [index 0, index 1]
^
|
list2
[1,2] <---+
^ |
| |
[index 0, index 1]
[1,2] <---+
^ |
| |
list1: [index 0, index 1]
^
|
list2
list1 = [[1]]
list1.append(list1[0][:]) # copy using slice syntax
list1[1].append(2)
list2 = [x[:] for x in list1] # copy again using slice syntax and a list
# comprehension, assuming you don't want an alias