在我的尝试中,我有一个列表:“ stuff”,应该递归进行迭代以查找所有可能的组合。它通过尝试对除第一个项以外的所有项进行递归,尝试对除[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应该是列出的可能性,但是它没有出现,这使我认为我做错了事。
答案 0 :(得分:2)
一种方法是通过itertools软件包: 从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
我将留给您编辑此功能,以便仅返回给定大小的结果。