python - 向递归函数添加逻辑
问题描述
下面的函数产生输入列表的笛卡尔积。
你怎么能让它只产生最后两个数字是偶数的结果?
我只是想看看如何正确地将逻辑添加到这种类型的函数的示例。
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)))
解决方案
您可以添加一个条件语句,检查当前输入列表的长度是否仍然大于 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
推荐阅读
- javascript - 为什么在将文件上传到 Firebase 存储的这段代码中似乎没有执行 RxJS finalize() 箭头函数代码?
- sql-server - 如何使 GETDATE 动态化,以便如果报告在任何日期运行,它应该显示指定日期的信息
- java - 从Apache Hive批量检索百万条记录-Java 8 + Spring Boot + Hive 1.2.1版本
- php - 如何更改 laravel 队列中作业表的表名和列名?
- javascript - React JS 15.0 - 减速器根本不工作
- android - Android App Kotlin:未解决的参考:地图
- selenium - 错误:找不到配置文件目录。console.warn:SearchSettings:“获取:不存在设置文件,新配置文件?” 使用 GeckoDriver Firefox 和 Selenium
- javascript - 同步回调时的回调队列
- amazon-web-services - 如何使 S3 存储桶出现在另一个 Aws 帐户的云端源列表中
- python - 避免代码 TypeError:“NoneType”对象不可下标