簡體   English   中英

使用遞歸創建列表組合

[英]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)

對於每個元素xa ,產生所有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.

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