使用Python递归生成组合

2024-09-30 00:41:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图提供一个递归方法,当给定一个课程列表时,它提供所有可能组合的列表。E、 g菜=[主菜,甜点] 到目前为止,我得到的是:

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)])

\n我试图使它打印出组合,如[[pumkinsoup,cheesecake],[punkinsoup, icecream]]等等,但实际上它给了我[pumkinsoup, cheesecake, icecream]等等。在

尝试用addition而不是append来添加它,但它给了我一个错误。在

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


Tags: 方法列表makesodefrecursivefarorders
2条回答

如果需要递归版本,可以执行以下操作:

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递归地构造新列表。在

离你不远了-使用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')

相关问题 更多 >

    热门问题