簡體   English   中英

關於返回組合 N 取 K 的問題

[英]Question about returning combination N taken K

我想列出的所有組合ka列表1 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]]

我不允許使用任何導入作為限制

我添加了一個新參數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]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM