根据条件从集合中生成唯一的有序子集

Generate unique ordered subsets from set based on condition

正在为我的离散数学 class 解决 python 内部子集的生成问题。我有一组要拆分成子集,这些子集根据特定条件和特定大小进行排序。

例如:子集 = {x1, x2, x3} ⊆ {5, 10, 15, 20, 25} 和 x1 < x2 < x3.

我想从更大的集合中生成所有可能的子集,大小为 3,条件是它们按升序排列。我很有可能过度考虑了这个的实施。我目前有一个可用的排列生成器,但它基本上生成了所有可能的组合。代码:

def perm(elements):
    if len(elements) <= 1:
        yield elements
    else:
        for i in range(len(elements)):
            for p in perm(elements[:i] + elements[i+1:]):
                yield [elements[i]] + p

我希望能够对此进行修改,以便我可以使用此函数生成我正在寻找的内容。我尝试修改初始 for 循环的范围,但它最终删除了某些可能以其他方式出现的排列,可以说我比取得进展更受困。如有任何帮助或建议,我们将不胜感激。

除非我误解了你在找什么itertools.combinations已经实现了获取所有唯一子集的功能。

假设您只是在寻找每个要排序的组合。只要初始输入是排序的,组合也是如此。

import itertools

elements = sorted({5, 10, 15, 20, 25})
subset_size = 3
print(list(itertools.combinations(elements, subset_size)))

生产:

[(5, 10, 15), 
 (5, 10, 20), 
 (5, 10, 25), 
 (5, 15, 20), 
 (5, 15, 25), 
 (5, 20, 25), 
 (10, 15, 20), 
 (10, 15, 25), 
 (10, 20, 25), 
 (15, 20, 25)]