猿问

使用可变的现有变量创建重复 n 次的列表

我有一个 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'>

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


慕后森
浏览 127回答 1
1回答

跃然一笑

你可以只使用.copy():import numpy as npR = np.array([[2,3,0], [6,78,8],[1,2,3]])U = [R.copy() for _ in range(3)]U[1][2,2] = 0print(U)给出:[array([[ 2,&nbsp; 3,&nbsp; 0],&nbsp; &nbsp; &nbsp; &nbsp;[ 6, 78,&nbsp; 8],&nbsp; &nbsp; &nbsp; &nbsp;[ 1,&nbsp; 2,&nbsp; 3]]),&nbsp;array([[ 2,&nbsp; 3,&nbsp; 0],&nbsp; &nbsp; &nbsp; &nbsp;[ 6, 78,&nbsp; 8],&nbsp; &nbsp; &nbsp; &nbsp;[ 1,&nbsp; 2,&nbsp; 0]]),&nbsp;array([[ 2,&nbsp; 3,&nbsp; 0],&nbsp; &nbsp; &nbsp; &nbsp;[ 6, 78,&nbsp; 8],&nbsp; &nbsp; &nbsp; &nbsp;[ 1,&nbsp; 2,&nbsp; 3]])]
随时随地看视频慕课网APP

相关分类

Python
我要回答