gpt4 book ai didi

Python:更改列表列表中的元素

转载 作者:行者123 更新时间:2023-11-28 17:26:52 25 4
gpt4 key购买 nike

我有 2 个列表:

one = [
[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6],
[4, 5, 6, 7]
]

two = [
[one[0][0], one[0][1], one[1][0], one[1][1]],
[one[0][2], one[0][3], one[1][2], one[1][3]],
[one[2][0], one[2][1], one[3][0], one[3][1]],
[one[2][2], one[2][3], one[3][2], one[3][3]]
]

当我输入这个时:

two[0][0] = 9

结果是这样的:

one: [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7]]
two: [[9, 2, 2, 3], [3, 4, 4, 5], [3, 4, 4, 5], [5, 6, 6, 7]]

当我更改“两个”列表中的元素时,我如何才能获得与“一个”列表中的“两个”列表相同的更改,以便:

one: [[9, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6], [4, 5, 6, 7]]
two: [[9, 2, 2, 3], [3, 4, 4, 5], [3, 4, 4, 5], [5, 6, 6, 7]]

最佳答案

正如其他人所解释的,这里的问题是 int 对象是不可变的这样做

two[0][0] = 9

不会更改旧的 two[0][0] 对象,而是创建新对象并使 two[0][0] 引用这个新对象(在这种情况下,如果没有其他引用,旧对象将被垃圾收集是)

在这种情况下,在创建两个数组后,为了更清楚,我们有以下内容(--> 表示引用)

one[0][0] --> object(1)
two[0][0] --> object(1)

然后当你执行

two[0][0] = 9

对象引用看起来像这样

one[0][0] --> object(1)
two[0][0] --> object(9)

因此,为了解决这个问题,我们需要将数组中的值更改为可变

我已经创建了一个非常简单的类来保存 int 并从中创建数组,这解决了您的问题

这是工作代码

class IntHolder:
def __init__(self,int_value):
self.intvalue = int_value
def set_value(self,int_value):
self.intvalue = int_value
def __str__(self):
return str(self.intvalue)
def __repr__(self):
return str(self.intvalue)
def __str__(self):
return str(self.intvalue)
one = [
[IntHolder(1), IntHolder(2), IntHolder(3), IntHolder(4)],
[IntHolder(2), IntHolder(3), IntHolder(4), IntHolder(5)],
[IntHolder(3), IntHolder(4), IntHolder(5), IntHolder(6)],
[IntHolder(4), IntHolder(5), IntHolder(6), IntHolder(7)]
]

two = [
[one[0][0], one[0][1], one[1][0], one[1][1]],
[one[0][2], one[0][3], one[1][2], one[1][3]],
[one[2][0], one[2][1], one[3][0], one[3][1]],
[one[2][2], one[2][3], one[3][2], one[3][3]]
]
two[0][0].set_value(9)

print one
print two

关于Python:更改列表列表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38171833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com