使用可变的现有变量创建重复 n 次的列表
Creating a list repeated n times using an existing variable which is mutable
我有一个 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'>
我应该怎么做才能创建每个内容独立(即不可变)的列表?
你可以只使用 .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]])]
我有一个 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'>
我应该怎么做才能创建每个内容独立(即不可变)的列表?
你可以只使用 .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]])]