我需要为列表Y中的每个元素从范围X分配一个随机数,同时最小化X的重复数。
为了澄清,我不希望出现这样的情况:我没有使用X的数字 i ,而没有使用X的数字 j 。
以一种有效的计算方式做到这一点?我很高兴使用图书馆。
答案 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))