仅从Python中的列表生成某些组合

时间:2014-05-14 21:26:30

标签: python list combinations itertools

我使用以下脚本生成所有组合:

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个元素。

关于如何做到这一点的任何想法?

1 个答案:

答案 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)),但很难如果没有做一些分析,可以判断它是否更好。