Python随机列表

Pyt*_*New 7 python random list

我是Python的新手,在创建随机列表时遇到了一些问题.

我正在使用random.sample(range(x, x), y).

我希望得到4个具有唯一编号的列表,从1-4开始,所以我一直在使用它

a = random.sample(range(1, 5), 4)
b = random.sample(range(1, 5), 4)
c = random.sample(range(1, 5), 4)
d = random.sample(range(1, 5), 4)
Run Code Online (Sandbox Code Playgroud)

所以我举个例子

a = 1, 3, 2, 4
b = 1, 4, 3, 2
c = 2, 3, 1, 4
d = 4, 2, 3, 1
Run Code Online (Sandbox Code Playgroud)

如何才能使列也是唯一的?

orl*_*rlp 1

也许最简单的方法是创建一个有效的矩阵,然后打乱行,然后打乱列:

import random

def random_square(U):
    U = list(U)
    rows = [U[i:] + U[:i] for i in range(len(U))]
    random.shuffle(rows)
    rows_t = [list(i) for i in zip(*rows)]
    random.shuffle(rows_t)
    return rows_t
Run Code Online (Sandbox Code Playgroud)

用法:

>>> random_square(range(1, 1+4))
[[2, 3, 4, 1], [4, 1, 2, 3], [3, 4, 1, 2], [1, 2, 3, 4]]
Run Code Online (Sandbox Code Playgroud)

这应该能够以相同的概率创建任何有效的矩阵。经过一些阅读后,这似乎仍然存在偏见,尽管我还没有完全理解为什么。