【发布时间】:2021-03-13 18:41:54
【问题描述】:
我正在尝试在主列表级别上对列表列表进行就地修改。但是,当我尝试修改迭代变量(下例中的row)时,它似乎创建了一个指向它的新指针,而不是修改它。
我的问题的最小示例。
c = [1,2,3]
for x in c:
x = x + 3
print(c) #returns [1,2,3], expected [4,5,6]
上面的例子是我的问题的一个简单例子。有没有办法修改x elementwise,就地并让更改出现在 C 中?
我的问题的不那么琐碎的例子。我将所有 0 转换为 1,反之亦然。
A = [[1,1,0],
[1,0,1],
[0,0,0]]
for row in A:
row = list(map(lambda val: 1 - val, row))
print(A)
预期
A = [[0,0,1],
[0,1,0],
[1,1,1]]
返回
A = [[1,1,0],
[1,0,1],
[0,0,0]]
更新:
到目前为止很好的答案。我对迭代变量(第二个示例中的row)如何链接到可迭代变量(第二个示例中的A)感兴趣。
如果我执行以下操作,反转 A 的每个子列表,它会完美运行。
为什么下面的例子,我修改了迭代变量,但上面的例子没有?
A = [[1,1,0],
[1,0,1],
[0,0,0]]
for row in A:
row.reverse()
print(A)
#returns, as expected
A = [[0, 1, 1],
[1, 0, 1],
[0, 0, 0]]
【问题讨论】:
-
我已经更新了我的答案。