产生一定数量的一定长度的组合?

Producing a certain number of combinations of a certain length?

我想知道是否有一个函数或算法只能产生一定数量的列表元素的随机组合。例如,我想要长度为 4 的列表元素的 50 种组合。有什么我可以用的吗?谢谢!

使用 random.sample 并通过列表理解重复 50 次。

import random
combinations = [random.sample(my_list, 4) for _ in range(50)]

这些组合可能会重叠。如果您希望它们不重叠(没有共享元素的 50 种组合),则取一个大样本并将其分成块。

selection = random.sample(my_list, 4 * 50)
combinations = [selection[i:i+4] for i in range(0, 4*50, 4)]

您可以使用标准 itertools.combinations 函数来生成组合(注意结果是一个生成器)。然后,您可以使用 random.sample 随机 select 创建组合的第 n 个元素。

请注意,如果 selected 组合在总生成组合中所占比例较低(因为所有组合都是先生成然后随机 selected),则此解决方案的性能不佳。

import itertools
import random

ELEMENTS = [1, 2, 3, 4, 5, 6, 7, 8]
COMBINATIONS_COUNT = 50
EACH_COMBINATION_LENGTH = 4

all_combinations = list(itertools.combinations(ELEMENTS, EACH_COMBINATION_LENGTH))
selected_combinations = random.sample(all_combinations, COMBINATIONS_COUNT)

print(selected_combinations)