二维数组 Python 中的列替换(不是 numpy)

问题描述 投票:0回答:1

我有一个愚蠢的问题:

例如,我有一个数组

x = [[1,1,1],[1,1,1],[1,1,1]]

如果是

x[1][:] = [9 if x[1][k] == 1 else 0 for k in range(3)]

我会得到

[[1, 1, 1], [9, 9, 9], [1, 1, 1]]

但是在这种情况下

x[:][1] = [9 if x[k][1] == 1 else 0 for k in range(3)]

我会得到

[[1,1,1],[1,1,1],[1,1,1]]

为什么?

对于 numpy 来说这不是问题,一切正常,但是为什么对于原始 Python 来说这是一个问题?

python arrays generator
1个回答
0
投票

您对任何其他作业都会有相同的行为:

x[:][1] = 'hello'
print(x) # unchanged

这是因为您正在分配给

x
的副本(这不是 numpy,因此
x[:]
不是视图而是副本),您不持有该副本并立即将其丢弃。

你正在做的事情相当于:

y = x[:]
y[1] = 'hello'

print(x) # unchanged
print(y) # changed
© www.soinside.com 2019 - 2024. All rights reserved.