如何在python中生成唯一模值的随机数

如何在python中生成唯一模值的随机数,python,random,modulus,Python,Random,Modulus,这段代码生成16个随机数,选择范围最大为1000。但是如何生成具有不同模数值(从1到26)的数字,就像python中的那样 考虑数值例子 随机获得的值为: 184,15106,8,93150210144271365,65,60385164349405 当我们对所有这些数字执行mod 26操作时,我们得到 0,15,2,8,15,20,2,14,11,1,13,8,21,8,11,15 这里的数字15,8,11,2重复出现。所以我想消除这种重复。为此,我希望在执行mod 26操作时生成具有不同值的

这段代码生成16个随机数,选择范围最大为1000。但是如何生成具有不同模数值(从1到26)的数字,就像python中的那样

考虑数值例子

随机获得的值为:
184,15106,8,93150210144271365,65,60385164349405
当我们对所有这些数字执行
mod 26
操作时,我们得到
0,15,2,8,15,20,2,14,11,1,13,8,21,8,11,15

这里的数字
15,8,11,2
重复出现。所以我想消除这种重复。为此,我希望在执行
mod 26
操作时生成具有不同值的随机数

你能行 随机输入 随机样本(范围(10000),1000) 这将生成1000个随机数

例如,获取10000范围内的10个随机数

随机抽样(范围(10000),10) [333928459485852601356913327123486198939483]


假设您要查找其模数
5
4
16
数字,最大值不大于
1000

Numpy解决方案

import random
value = 1000
a = []
i = 0
b = [None] * 16
print('value = ',1000)
for x in range(value):
    a.append(x)
    random.Random(4).shuffle(a)
print(a)
for x in range(16):
    b[x] = a[x]
print(b)
def choose_random(max_limit=1000, modulo=5, value=4, size=16):
    x_max = (max_limit - value) // modulo
    if (max_limit - value) % modulo != 0:
        x_max += 1
    x = np.arange(x_max)
    y = x * modulo + value
    return np.random.choice(y, size=size, replace=True)

print(choose_random())
Out: [309 939 449 219 639 614 779 549 189   4 729 629 939 159 934 654] 
distinct_modulo(n=16, modulo=26)
Out: [ 0, 19, 23,  5,  6, 25, 21, 22, 10, 16, 12, 14, 20, 15,  1,  8]
更简单的Numpy解决方案

import random
value = 1000
a = []
i = 0
b = [None] * 16
print('value = ',1000)
for x in range(value):
    a.append(x)
    random.Random(4).shuffle(a)
print(a)
for x in range(16):
    b[x] = a[x]
print(b)
def choose_random(max_limit=1000, modulo=5, value=4, size=16):
    x_max = (max_limit - value) // modulo
    if (max_limit - value) % modulo != 0:
        x_max += 1
    x = np.arange(x_max)
    y = x * modulo + value
    return np.random.choice(y, size=size, replace=True)

print(choose_random())
Out: [309 939 449 219 639 614 779 549 189   4 729 629 939 159 934 654] 
distinct_modulo(n=16, modulo=26)
Out: [ 0, 19, 23,  5,  6, 25, 21, 22, 10, 16, 12, 14, 20, 15,  1,  8]
如果需要不同的模
n

def choose_random(max_limit=1000, modulo=5, value=4, size=16):
    y = np.arange(value, max_limit, value)
    return np.random.choice(y, size=size, replace=True)
只需返回范围
[0,模-1]

def distinct_modulo(n, modulo):
    if n > modulo:
        raise Exception("Can't return more than {0} distinct values!".format(modulo))
    return np.random.choice(modulo, size=n, replace=False)
非Numpy解决方案

import random
value = 1000
a = []
i = 0
b = [None] * 16
print('value = ',1000)
for x in range(value):
    a.append(x)
    random.Random(4).shuffle(a)
print(a)
for x in range(16):
    b[x] = a[x]
print(b)
def choose_random(max_limit=1000, modulo=5, value=4, size=16):
    x_max = (max_limit - value) // modulo
    if (max_limit - value) % modulo != 0:
        x_max += 1
    x = np.arange(x_max)
    y = x * modulo + value
    return np.random.choice(y, size=size, replace=True)

print(choose_random())
Out: [309 939 449 219 639 614 779 549 189   4 729 629 939 159 934 654] 
distinct_modulo(n=16, modulo=26)
Out: [ 0, 19, 23,  5,  6, 25, 21, 22, 10, 16, 12, 14, 20, 15,  1,  8]

什么是“唯一模量值”?唯一模量值表示模量值(例如421 mod 26)为每个随机选择的数字计算的值应不同,或选择16个随机数,这些随机数具有上述1到26之间的不同模数值。所选数字的计算模块值应不同,或每个模块值应彼此唯一,模块值可以在1到26之间如果你能在上面给我们一个数值例子会更好。我在问题中加了一个简单的数值解释。希望你理解我的问题。这里也有数字在你的输出中重复。请在不使用numpy的情况下执行此操作。上一个代码中的错误是
replace=True
必须是
replace=False
。还添加了非numpy解决方案