我想制作一个矩阵,其行是以下向量的不同排列=
[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)
但它会产生相同的结果。有什么简单的方法可以解决这个问题吗?
非常感谢您提供的任何帮助=)
最佳答案
您将对象引用添加到列表中。将其视为一个指针。您添加到 Matpreferences 的每个 vec 都指向同一个实例。
看这个例子:
>>> vec = [1,2,3,4,5]
>>> vec2 = vec
>>> random.shuffle(vec)
>>> print vec
[2, 4, 3, 1, 5]
>>> print vec2
[2, 4, 3, 1, 5]
>>>
如您所见,即使我没有随机播放 vec2
,vec
和 vec2
的内容也是相同的。
您需要做的是将vec
的内容复制到一个新列表中,然后将该列表添加到Matpreferences
将最后一行替换为
Matpreferences.append([x for x in vec])
或
Matpreferences.append(vec[:])
关于python - python 的 random.shuffle 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30659237/