使用一个现有的变量创建一个重复n次的列表,这个变量是可以改变的[重复]。

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

我有一个numpy数组,初始化为 A = np.array([[1,2,3],[4,5,6],[7,8,9]]) 我想创建一个列表 C = [A, A, A, A]. 我可以做 C = [[A] * 4] 但这将产生一个可变的列表,改变一个元素将改变其他元素。我也知道我们可以用这种方式克服这个问题。C = [np.array([[1,2,3],[4,5,6],[7,8,9]]) for _ in range(3)] 但这样会使代码变得冗长 使用 C = [A for _ in range(3)] 无济于事。我已经验证了下面的内容。

>>> R = np.array([[2,3,0], [6,78,8],[1,2,3]])
>>> R
array([[ 2,  3,  0],
       [ 6, 78,  8],
       [ 1,  2,  3]])
>>> U = [R for _ in range(3)]
>>> U[1]
array([[ 2,  3,  0],
       [ 6, 78,  8],
       [ 1,  2,  3]])
>>> U[2]
array([[ 2,  3,  0],
       [ 6, 78,  8],
       [ 1,  2,  3]])
>>> U[2][2,2]
3
>>> U[1][2,2]
3
>>> U[1][2,2] = 0
>>> U[2][2,2]
0
>>> type(U)
<class 'list'>

我应该怎么做才能创建一个列表,每个内容都是独立的(即不可变)?

python-3.x numpy immutability
1个回答
1
投票

你可以直接使用 .copy():

import numpy as np


R = np.array([[2,3,0], [6,78,8],[1,2,3]])
U = [R.copy() for _ in range(3)]

U[1][2,2] = 0

print(U)

给予:

[array([[ 2,  3,  0],
       [ 6, 78,  8],
       [ 1,  2,  3]]),
 array([[ 2,  3,  0],
       [ 6, 78,  8],
       [ 1,  2,  0]]),
 array([[ 2,  3,  0],
       [ 6, 78,  8],
       [ 1,  2,  3]])]
© www.soinside.com 2019 - 2024. All rights reserved.