我有一个从 0 到 149 的 150 个数字的列表。我想使用具有 150 次迭代的 for 循环来生成 150 个 6 个数字的列表,这样,t 在每次迭代k
中,k
包括数字以及 5 个不同的随机数数字。例如:
S0 = [0, r1, r2, r3, r4, r5] # r1, r2,..., r5 are random numbers between 0 and 150
S1 = [1, r1', r2', r3', r4', r5'] # r1', r2',..., r5' are new random numbers between 0 and 150
...
S149 = [149, r1'', r2'', r3'', r4'', r5'']
此外,每个列表中的数字必须不同,并且最小距离为 5。这是我正在使用的代码:
import random
import numpy as np
final_list = []
for k in range(150):
S = [k]
for it in range(5):
domain = [ele for ele in range(150) if ele not in S]
d = 0
x = k
while d < 5:
d = np.Infinity
x = random.sample(domain, 1)[0]
for ch in S:
if np.abs(ch - x) < d:
d = np.abs(ch - x)
S.append(x)
final_list.append(S)
输出:
[[0, 149, 32, 52, 39, 126],
[1, 63, 16, 50, 141, 79],
[2, 62, 21, 42, 35, 71],
...
[147, 73, 38, 115, 82, 47],
[148, 5, 78, 115, 140, 43],
[149, 36, 3, 15, 99, 23]]
现在,代码正在运行,但我想知道是否可以强制每个数字在所有迭代中的重复次数大致相同。例如,使用前面的代码后,此图指示每个数字在生成的列表中出现的次数:
如您所见,有些数字出现了 10 次以上,而有些数字只出现了 2 次。是否可以减少这种变化水平,以便该图可以近似为均匀分布?谢谢。