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