打印python中n的所有可能的n个k组合[重复]

问题描述 投票:-1回答:1

此问题已经在这里有了答案:

我必须编写一个函数,将两个数字n和k作为输入,并在屏幕上打印由n创建的集合的所有k长度子集(顺序不重要),因此基本上是一个函数,可以打印所有k -n的组合。

例如:如果n = 4且k = 2,则初始集合变为(1,2,3,4),并打印以下子集:

(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)

我知道已经有一个函数可以执行此操作,但是我必须从头开始创建该函数,因此禁止使用itertools或任何其他模块,并且不能,我不能从文档并将其粘贴到我的代码中。如您所知,这是我大学的作业,所以我不是要您为我解决它,而是给我一个代码,我希望有人向我解释我该怎么做。

我知道必须使用递归函数来完成,因为数量k未知。我还考虑了两种不同的解决方案,我不确定它们是否正确:

第一个解决方案:

创建给定集合的幂集,然后删除长度不同于k的所有子集。

第二解决方案:

使用从1到n ^ k的数字填充列表,然后删除所有重复的数字。然后将数字转换为字符串并将其打印为子集。

python
1个回答
0
投票

尝试此代码:

def combinations(l, k):
    if k <= 0:
        comb = [None]
    else:
        comb = []
        for i, item in enumerate(l, 1):
            rem_items = l[i:]
            rem_comb = combinations(rem_items, k-1)
            comb.extend(item if c is None else (item, c) for c in rem_comb)
    return comb

n = 4
k = 2
combinations(range(1,n), k)
# [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
© www.soinside.com 2019 - 2024. All rights reserved.