使用递归创建列表组合

2024-10-02 08:27:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我在从列表创建元素组合时遇到麻烦。在

我想做的是在Python中创建一个递归函数,它返回元素的组合,例如lista = [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,而不是组合{}

我知道有一个特殊的函数,但我想递归地做。有什么建议吗?在

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) 

Tags: 函数元素编码列表lenifdefetc
2条回答

可以这样做:

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)

对于a中的每个元素x,从其右边的元素生成所有的k-1组合,并在每个组合前面加上{}。如果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

取消对“print”行的注释以查看发生了什么。在

顺便说一句,最好使用英语变量和函数名,只是为了实现互操作性(您的问题就是一个例子)。在

相关问题 更多 >

    热门问题