Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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中的2d列表中存储新列表集?_Python_List - Fatal编程技术网

如何在python中的2d列表中存储新列表集?

如何在python中的2d列表中存储新列表集?,python,list,Python,List,我有一个列表路径。最初,它看起来是这样的: path = [2, 1, 3, 0] path = [2, 1, 3] path = [2, 1] path = [2, 1, 9] path = [2, 1, 9, 5] path=[2,1,3,0] 我必须在流程的不同步骤中在path上运行许多操作。但是我必须在每个步骤之后存储path的内容。我是说 path = [2, 1, 3, 0] path.pop() # need to store path.pop() # same p

我有一个列表
路径
。最初,它看起来是这样的:

path = [2, 1, 3, 0]

path = [2, 1, 3]

path = [2, 1]

path = [2, 1, 9]

path = [2, 1, 9, 5]
path=[2,1,3,0]

我必须在流程的不同步骤中在
path
上运行许多操作。但是我必须在每个步骤之后存储
path
的内容。我是说

path = [2, 1, 3, 0]

path.pop() # need to store

path.pop() # same

path.append(9) # same

path.append(5) # same
因此,在每个步骤之后,路径将如下所示:

path = [2, 1, 3, 0]

path = [2, 1, 3]

path = [2, 1]

path = [2, 1, 9]

path = [2, 1, 9, 5]
因为我需要这些,所以我想将它们存储在2D列表中。因此,最终2D列表将如下所示:

path = [2, 1, 3, 0]

path = [2, 1, 3]

path = [2, 1]

path = [2, 1, 9]

path = [2, 1, 9, 5]
但问题是,一开始我不知道定制列表能增长多大?它只在运行时决定。因此,我的想法是,在每一步之后,我都会将
路径
附加到我的
自定义列表
中,这样当过程完成时
自定义列表
将存储上述所有
路径的
内容。像这样:

custom_list=[[2,1,3,0],[2,1,3],[2,1],[2,1,9],[2,1,9,5]

但是对于这个
。append
不起作用。如何解决这个问题

使用
列表
实现这一点是否有效,或者我是否应该选择任何其他方式,即
numpy数组
或其他方式?如果是,请提及并解释

编辑 代码:


使用
copy.deepcopy

每当您在列表上执行追加和弹出所有操作时,所以在最后一次操作之后,无论列表中有什么值,其打印都是相同的

In [10]: path=[1,2,3,4]

In [11]: path2=path

In [12]: path.pop()
Out[12]: 4

In [13]: path2
Out[13]: [1, 2, 3]

In [14]: #using deepcopy

In [15]: import copy

In [16]: path=[1,2,3,4]

In [17]: path2=copy.deepcopy(path)

In [18]: path.pop()
Out[18]: 4

In [19]: path2
Out[19]: [1, 2, 3, 4]
修改您的代码:

  import copy
    list = [2,1,3,0]
    my_list = [] #take the inly list
    my_list.append(copy.deepcopy(list))
    list.pop()
    list.pop()
    list.append(9)
    my_list.append(copy.deepcopy(list))
    list.append(5)
    my_list.append(copy.deepcopy(list))
    print(my_list)
结果:

[[2, 1, 3, 0], [2, 1, 9], [2, 1, 9, 5]]

最好使用不可变的集合(为要跟踪的每个状态创建一个
tuple
):

您的问题是,
list
正在修改,而
my_list
只是包含对同一列表的多个引用<无法就地修改代码>元组。每一次添加都是一个全新的实例

如果出于某种原因需要使用列表,可以使用
list[:]
创建副本:

my_list.append(list[:])

使用
path[:]
path.copy()
进行复制

cusls = []
path = [2, 1, 3, 0]
cusls.append(path[:])
path.pop() # need to store
cusls.append(path[:])
path.pop() # same
cusls.append(path[:])
path.append(9) # same
cusls.append(path[:])
path.append(5) # same
cusls.append(path[:])

cusls
Out[25]: [[2, 1, 3, 0], [2, 1, 3], [2, 1], [2, 1, 9], [2, 1, 9, 5]]

仍然不清楚你在问什么,你可以在列表中添加列表,发布代码的问题是什么,以及在列表中添加列表的预期结果没有像我提到的那样提供像
custom\u list
这样的格式。它只是这样添加:`custom_list=[2,1,3,0,2,1,3]post the code还提供了代码
my_list。append(list)
一次又一次地追加相同的列表。
deepcopy
只有在列表包含对象时才是必需的。如果它只是一个
int的列表
,则无需导入任何内容,因为您可以使用
list.copy()
谢谢您的建议,我只是考虑一下可以帮助您的总体概念