python - python 的 random.shuffle 出现问题

标签 python matrix random permutation shuffle

我想制作一个矩阵,其行是以下向量的不同排列=
[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]
>>> 

如您所见,即使我没有随机播放 vec2vecvec2 的内容也是相同的。

您需要做的是将vec的内容复制到一个新列表中,然后将该列表添加到Matpreferences

将最后一行替换为

Matpreferences.append([x for x in vec])

Matpreferences.append(vec[:])

关于python - python 的 random.shuffle 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30659237/

相关文章:

python - 如何在 Keras 中展平不同大小的数据并在下一层中使用它

python - 马赫制表符或行首 8 个空格

r - 如何将 "unmelt"数据帧转换为矩阵?

arrays - 在 Matlab 中创建二进制矩阵,报告数量不断增加

python - 如何导入包含具有循环依赖的类的模块?

python - 用USB控制电子元件?

r - 按 R 中的列匹配 ID 追加列

arrays - 在 Swift 中从数组中获取随机元素

c - 随机数生成-未声明的标识符

random - 数字食谱 ran3 生成负数