我正在尝试提供一个递归方法,在给定课程列表时提供所有可能组合的列表。 E.g course = [主菜,甜点] 这就是我到目前为止所做的:
Entree = ["pumkinsoup","antipasto"]
Dessert = ["cheesecake", "icecream", "tiramisu", "cheeseplatter"]
courses = [Entree, Dessert]
def make_orders(courses):
dishes_so_far = []
recursive_make_orders(dishes_so_far, courses)
def recursive_make_orders(dishes_so_far, courses):
n = len(courses)
if n==0 :
print(dishes_so_far)
else:
current_courses = courses[0]
for D in current_courses:
dishes_so_far.append(D)
recursive_make_orders(dishes_so_far , courses[1:len(courses)])
\我正在尝试制作它,以便打印出[[pumkinsoup,cheesecake],[punkinsoup, icecream]]
等组合,但它实际上给了我[pumkinsoup, cheesecake, icecream]
等等。
尝试添加添加而不是附加,它给了我一个错误。
这是家庭作业,因此需要递归方法。
答案 0 :(得分:2)
你离我太远 - 使用itertools.product
和*courses
解压缩它:
from itertools import product
for course in product(*courses):
print course
('pumkinsoup', 'cheesecake')
('pumkinsoup', 'icecream')
('pumkinsoup', 'tiramisu')
('pumkinsoup', 'cheeseplatter')
('antipasto', 'cheesecake')
('antipasto', 'icecream')
('antipasto', 'tiramisu')
('antipasto', 'cheeseplatter')
答案 1 :(得分:1)
如果你想要递归版,你可以这样做:
def worker(entree, dessert):
d = []
if not entree or not dessert: return d
d.append((entree[0], dessert[0]))
d += worker(entree[1:], dessert)
d += worker(entree, dessert[1:])
return d
您的版本无法正常工作,因为courses
现在是列表列表,而courses[0]
只是Entree
,因此您从Entree
递归构建新列表。