Python 基于条件从集合生成唯一的有序子集

Python 基于条件从集合生成唯一的有序子集,python,discrete-mathematics,Python,Discrete Mathematics,在我的离散数学课上,试图解决python内部子集的生成问题。我有一个集合,可以拆分为子集,这些子集是根据特定条件和特定大小排序的 例如:子集={x1,x2,x3}⊆ {5,10,15,20,25}和x1

在我的离散数学课上,试图解决python内部子集的生成问题。我有一个集合,可以拆分为子集,这些子集是根据特定条件和特定大小排序的

例如:子集={x1,x2,x3}⊆ {5,10,15,20,25}和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
def perm(元素):

if len(elements)除非我误解了您所寻找的内容,否则它已经实现了获取所有唯一子集的功能

假设您只是在寻找要排序的每个组合。只要对初始输入进行排序,组合也将被排序

导入itertools
元素=排序({5,10,15,20,25})
子集大小=3
打印(列表(itertools.组合(元素、子集大小)))

产生:

[(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)]

你可以通过对原始输入进行排序来对输出进行排序。不,你是对的,这正是我想要的。问题是,我也在试着推出我自己的,我只是在itertools文档页面上工作过,但我仍然不太清楚算法本身是如何工作的。我想你得多看一点。你可以随时查看源文件。如果控制,请查找字符串
。。function::combinations(iterable,r)
有一个大致等效的python实现。