我使用以下脚本生成所有组合:
import itertools
x = 7
my_list = range(1, 11)
for k in [x]:
for sublist in itertools.combinations(my_list, k):
print sublist
对于第二部分,我将从范围(1,11)中取6个随机元素。我们称他们为my_second_list。 我需要生成my_list的最小组合数量,以获得至少一个组合,包括让我们说my_second_list中的5个元素。
关于如何做到这一点的任何想法?
答案 0 :(得分:0)
import itertools
x = 7
my_list = range(1,11)
for k in [x]: # isn't this just 7?
your_output = (combination for combination in itertools.combinations(my_list,k) if all(element in combination for element in [1,2,3,4,5]))
它很丑陋,但这就是我如何做到的(如果我能正确理解你的问题。你是否正试图只获得那些组合包含某个项目的子集,对吗?如果您想要包含项目子集的第一个组合之前的所有组合,请执行以下操作:
accumulator = list()
subset = [1,2,3,4,5] # or whatever
for k in [x]:
for combination in itertools.combinations(my_list,k):
accumulator.append(combination)
if all(el in combination for el in subset):
break
根据您的确切用例,您可能需要考虑将subset
定义为set
(例如{1,2,3,4,5}
)并执行subset.issubset(set(combination))
,但很难如果没有做一些分析,可以判断它是否更好。