我有一个列表path
。最初,它看起来像这样:
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列表将如下所示:
但问题是,最初我不知道custom_list
有多大?它只在运行时决定。所以我认为在每个步骤之后我会将path
附加到我的custom_list
,以便当流程完成时custom_list
将存储上述所有path's
内容。像这样:
custom_list = [[2, 1, 3, 0], [2, 1, 3], [2, 1], [2, 1, 9], [2, 1, 9, 5]]
但是对于这个.append
不起作用。如何解决这个问题呢?
使用list
实现此功能也是有效的,还是应该选择其他任何方式,即numpy array
或其他任何方式?如果是,那么请提及并解释
修改 代码:
list = [2,1,3,0]
my_list = [[]]
my_list.append(list)
list.pop()
list.pop()
list.append(9)
my_list.append(list)
list.append(5)
my_list.append(list)
my_list
>>>[[], [2, 1, 9, 5], [2, 1, 9, 5], [2, 1, 9, 5]]
答案 0 :(得分:2)
最好使用不可变集合(为要跟踪的每个州创建tuple
):
list = [2,1,3,0]
my_list = [()]
my_list.append(tuple(list))
list.pop()
list.pop()
list.append(9)
my_list.append(tuple(list))
list.append(5)
my_list.append(tuple(list))
my_list
# produces [(), (2, 1, 3, 0), (2, 1, 9), (2, 1, 9, 5)]
您的问题是list
正在被修改,然后my_list
只包含对同一列表的多个引用。无法对tuple
进行修改。每次添加都是一个全新的实例。
如果出于某种原因需要坚持使用列表,可以使用list[:]
创建副本:
my_list.append(list[:])
答案 1 :(得分:1)
使用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]]
答案 2 :(得分:1)
使用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]]