首页 > 解决方案 > 向递归函数添加逻辑

问题描述

下面的函数产生输入列表的笛卡尔积。

你怎么能让它只产生最后两个数字是偶数的结果?

我只是想看看如何正确地将逻辑添加到这种类型的函数的示例。

def product(ar_list):
    if not ar_list:
        yield ()
    else:
        for a in ar_list[0]:
            for prod in product(ar_list[1:]):
                out= (a,)+prod
                yield out

ar_list=[[1,2],[3,4],[5,6,7]]              
                
print(list(product(ar_list)))

标签: pythonrecursion

解决方案


您可以添加一个条件语句,检查当前输入列表的长度是否仍然大于 2,如果不是,则检查当前项是否为偶数,如果两个条件之一为真,则只为当前项产生输出:

def product(ar_list):
    if not ar_list:
        yield ()
    else:
        for a in ar_list[0]:
            if len(ar_list) > 2 or a % 2 == 0: # <== add this line
                for prod in product(ar_list[1:]):
                    out = (a,) + prod
                    yield out

推荐阅读