python列表数学索引变量

2024-04-25 10:06:37 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我想要的方式

a = [1,8,10]
b = list([a])

a = [0,8,10]

b.append(a)

a = [0,0,10]
b.append(a)

print(b)

给我我想要的清单:

[[1, 8, 10], [0, 8, 10], [0, 0, 10]]

我需要使用基于列表索引的变量来更改值,如下所示

^{pr2}$

我得到的结果是:

[[0, 8, 10], [0, 8, 10]]

我的全部目的是跟踪我创建nim游戏的动作。我想我看到了设置a[0]=a[0]-1会改变这两个位置的值,即使我尝试使用deep copy,但我不知道如何才能得到答案。我确信这是显而易见的,但我不知道用什么关键词来搜索解决方案,所以请帮助我。在


Tags: 答案目的游戏列表方式解决方案关键词list
1条回答
网友
1楼 · 发布于 2024-04-25 10:06:37

使用deepcopy应该行得通我怀疑你用错地方了。在

使用单个列表作为模板的危险在于,如果对其进行变异,则可能会更改已附加到b的列表。解决此问题的一种方法是,无论何时更改a的新副本。在

import copy

b = []

a = [1,8,10]
b.append(a)

a2 = copy.deepcopy(a)  
a2[0] = a2[0] - 1
b.append(a2)

print(b)

另一种方法可能是在将a附加到b时生成一个副本,这样就不必继续创建新变量:

^{pr2}$

这两种方法之间总是有不同的附加点。在代码中,将同一列表多次追加到b。这意味着,每当你改变a,就好像你改变了b中的所有东西。在

在我提供的两个示例中,我只将一个列表添加到一次,如果需要进行更改,可以复制它。通过这样做,我确保b中的每个列表都是唯一的,并避免遇到您遇到的问题。在

另外,创建列表副本的另一种方法是执行a2 = a[:]a[:]告诉Python从列表的开始到结尾获取a的列表片段,实际上是复制它。请注意,这是浅拷贝,不是深拷贝。但是,由于您的列表只包含数字,所以浅拷贝应该可以工作得很好。在

相关问题 更多 >