Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:追加列表中已经存在的列表元素_Python_List - Fatal编程技术网

Python:追加列表中已经存在的列表元素

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=[[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仍然指向同一个对象


我怎样才能避开这个问题呢?

这是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