[英]Question about listing all possible combination given n and k (Python)
[英]Question about returning combination N taken K
我想列出的所有組合k
長a
列表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.