为列表Y中的每个元素分配范围X中的随机数

时间:2019-05-05 19:15:28

标签: python random

我需要为列表Y中的每个元素从范围X分配一个随机数,同时最小化X的重复数。

为了澄清,我不希望出现这样的情况:我没有使用X的数字 i ,而没有使用X的数字 j

以一种有效的计算方式做到这一点?我很高兴使用图书馆。

1 个答案:

答案 0 :(得分:1)

类似于在评论中减少建议的内容-您可以制作一个基本的生成器,该生成器可以反复进行洗牌,然后从洗牌后的列表中产生元素,就像:

from random import shuffle
from itertools import islice
from collections import Counter

def shuffler(obj):
    lst = list(obj)
    while True:
        shuffle(lst)
        yield from lst

shuffled = shuffler(range(7))

然后您可以从中islice

random100 = list(islice(shuffled, 100))
# distro100 = Counter(random100)
# Counter({0: 15, 2: 14, 3: 14, 1: 14, 6: 14, 5: 14, 4: 15})

(可能)再次使用它:

random14 = list(islice(shuffled, 14))
# distro14 = Counter(random14)
# Counter({6: 3, 4: 2, 2: 2, 3: 2, 0: 2, 5: 2, 1: 1})

尽管如此,您可能需要重新设置它才能获得完美的全2发行版。

或与其他列表一起压缩:

pairs = list(zip(other_list, shuffled))