我想制作一个矩阵,其行是以下vector =的不同排列
[1,2,3,4,5,10,10,10,10,10]
我尝试使用random.shuffle函数,但似乎每次使用它时,它都会重新定义为其分配的所有对象。例如,我尝试了以下方法:
vec=[1,2,3,4,5]
for i in range(5):
vec.append(10)
Matpreferences=[]
for i in range(10):
random.shuffle(vec)
Matpreferences.append(vec)
但是然后我得到所有行都相等的矩阵。
例如:
[0, 0, 1.0, 0, 2.0, 3.0, 0, 0.5, 2.5, 1.5, 0]
[0, 0, 1.0, 0, 2.0, 3.0, 0, 0.5, 2.5, 1.5, 0]
[0, 0, 1.0, 0, 2.0, 3.0, 0, 0.5, 2.5, 1.5, 0]
[0, 0, 1.0, 0, 2.0, 3.0, 0, 0.5, 2.5, 1.5, 0]
...
我什至尝试过类似的东西
Matpreferences=[]
for i in range(10):
random.shuffle(vec)
a=vec
Matpreferences.append(a)
但是它产生相同的结果。有什么简单的方法可以解决这个问题?
非常感谢您提供的任何帮助=)
python大神给出的解决方案
您需要先复制vec
的副本,然后再对其进行洗牌:
import random
vec=[1,2,3,4,5]
for i in range(5):
vec.append(10)
Matpreferences=[]
for i in range(10):
v = vec[:]
random.shuffle(v)
Matpreferences.append(v)
说明
从您的代码:
a=vec
Matpreferences.append(a)
在这里,a
指向与vec
指向相同的数据。因此,当a
被改组时,vec
也会被改写,指向vec
的所有内容也会被改写。
相比之下,由于下标[:]
,此代码创建数据的新的独立副本:
v = vec[:]
因为v
是单独的副本,所以对v
进行改组对vec
无效。