[英]Using recursion to create a list combination
我在列表中創建元素組合時遇到了麻煩。
我想要做的是在Python中創建一個遞歸函數,它返回一個元素組合,例如list a = [1,2,3,4,5,6,7,8]
,結果將是組合[1 ,2,3,4],[1,3,4,5],[1,4,5,6],[1,2,4,5]等。對於8個元素,它應該返回70個組合(如果我我的數學是正確的)。 雖然最好的選擇是組合不重復。
我試着編碼它,但我得到的只是[1,2,3,4],[1,3,4,5] etc
但不是組合[1,5,7,8]
我知道有一個特殊功能,但我想以遞歸方式進行。 有什么建議么?
nimed = ["A","B","C","D","E","F","G","H"]
def kombinatsioonid(listike,popitav):
if len(listike) < 4:
return
tyhi = []
for c in range(len(listike)):
tyhi.append(listike[c])
listike.pop(popitav)
print(tyhi)
kombinatsioonid(listike,popitav)
kombinatsioonid(nimed,1)
這可以通過這種方式完成:
def combination(l,n, mylist=[]):
if not n: print(mylist)
for i in range(len(l)):
mylist.append(l[i])
combination(l[i+1:], n-1, mylist)
mylist.pop()
l = ["A","B","C","D","E","F","G","H"]
n=4
combination(l, n)
對於每個元素x
在a
,產生所有k-1
從元件權它的組合,並且在前面加上x
到每一個。 如果k==0
,則只返回一個空組合,從而退出遞歸:
def combs(a, k):
if k == 0:
return [[]]
r = []
for i, x in enumerate(a):
for c in combs(a[i+1:], k - 1):
r.append([x] + c)
#print '\t' * k, k, 'of', a, '=', r
return r
取消注釋“打印”行以查看正在發生的事情。
作為旁注,最好使用英文變量和函數名稱,只是為了互操作性(你的問題就是一個例子)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.