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

问题描述

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

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

我想从更大的集合中生成所有可能的子集,大小为 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,15),(5,20),25),(10,(15,25)]

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...