簡體   English   中英

您將如何遞歸獲取列表中項目的所有組合

[英]How Would You Recursively Get All The Combinations Of Items Within A List

在我的嘗試中,我有一個列表:應該遞歸迭代以找到所有可能的組合的“東西”。 它通過嘗試遞歸除第一個之外的所有項目,嘗試遞歸除 [1] 索引(翻轉)之外的所有項目,最后迭代除 [2] 索引(ollie)之外的所有項目。

stuff = ['1','2','3','4','5']

def rollOver(aL):
  neuList = []
  neuList.append(aL[0])
  neuList.extend(aL[2:])
  return neuList

def ollie(aL):
  neuList = []
  neuList.extend(aL[0:1])
  neuList.extend(aL[3:])
  return neuList

def recurse(info):
  try:
    if len(info) == 3:
      print(info)
    if len(info) > 1:
      recurse(info[1:])
      recurse(rollOver(info))
      recurse(ollie(info))
  except:
    l = 0

recurse(stuff)

我在紙上手動嘗試了這種方法,它似乎有效。 但是,在代碼中我得到了結果:

['3', '4', '5']
['2', '4', '5']
['3', '4', '5']
['1', '4', '5']
['1', '4', '5']

1, 3, 5 應該是列出的可能性,但它沒有出現,這讓我認為我做錯了什么。

一種方法是通過itertools包:

from itertools import combinations

stuff = ['1','2','3','4','5']

for i in combinations(stuff, 3):
    print(i)

這為您提供了所需的輸出:

('1', '2', '3')
('1', '2', '4')
('1', '2', '5')
('1', '3', '4')
('1', '3', '5')
('1', '4', '5')
('2', '3', '4')
('2', '3', '5')
('2', '4', '5')
('3', '4', '5')

或者,如果您想以遞歸方式自己編寫代碼,您可以按如下方式實現自己的函數:

def combs(stuff):
    if len(stuff) == 0:
        return [[]]
    cs = []
    for c in combs(stuff[1:]):
        cs += [c, c+[stuff[0]]]
    return cs

我將留給您編輯此函數以僅返回給定大小的結果。

暫無
暫無

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

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