首页 > 解决方案 > 关于返回组合N取K的问题

问题描述

我正在尝试列出k列表a1 到n. 我找到了返回所有组合的简洁代码。

def combs(a):
    if len(a) == 0:
        return [[]]
    cs = []
    for c in combs(a[1:]):
        cs += [c, c+[a[0]]]
    return cs

有没有办法可以修改它,以便我可以限制它返回的列表长度?

如果:

k = 3
n = 5

它只会从以下位置返回长度为 3 的组合:

lst = [1, 2, 3, 4, 5]

因此回报将是:

[[1, 2], [1, 3], [2, 3]]

我不允许使用任何导入作为限制

标签: pythonpython-3.x

解决方案


我添加了一个新参数k

注意这一行:

if len(c) >= k: return cs

如果数组大于 ,这将提前中断循环k

def combs(a, k, l=0):
    if len(a) == 0:
        return [[]]
    cs = []
    for c in combs(a[1:], k, l+1):
        cs += [c, c+[a[0]]]
    if l == 0:
        css = []
        for i in cs:
            if len(i) == k:
                css += [i]
        return css
    return cs


print(combs([1, 2, 3, 4, 5], 3))

因此,当 时k == 3,代码返回以下内容:

[[3, 2, 1], [4, 2, 1], [4, 3, 1], [4, 3, 2], [5, 2, 1], [5, 3, 1], [5, 3, 2], [5, 4, 1], [5, 4, 2], [5, 4, 3]]

推荐阅读