2

我正在尝试提供一种递归方法,该方法在给定课程列表时提供所有可能组合的列表。例如 course = [Entre, Dessert] 这是我目前所拥有的:

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]等等。

尝试用加法而不是追加来添加它,它给了我一个错误。

这是作业,所以需要递归方法。

4

2 回答 2

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')
于 2013-09-17T10:22:43.903 回答
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.

于 2013-09-17T10:40:43.737 回答