如何用try/except实现无有效迭代列表时自动降级的嵌套for循环
嵌套循环自动降级的简洁实现
你不需要重复编写多段try/except和嵌套循环,用Python标准库itertools.product配合分层降级尝试的逻辑,就能实现更简洁、扩展性更强的效果,代码如下:
import itertools value = [] list1 = None list2 = [1,2,3] list3 = [1,2,3] # 按外层到内层的顺序存入所有待嵌套的列表 all_lists = [list1, list2, list3] for start_idx in range(len(all_lists)): # 每次尝试砍掉最前面的start_idx层循环,取剩余列表组合 current_loop_lists = all_lists[start_idx:] try: # 用product自动生成多层嵌套的所有组合,等价于手写嵌套for for items in itertools.product(*current_loop_lists): value.append(sum(items)) # 执行成功直接退出,无需继续降级 break except TypeError: # 当前组合存在不可迭代的元素,继续尝试下一级降级 continue
逻辑说明
- 代码逻辑和你原本的手写多段
try效果完全一致:优先使用尽可能多层的嵌套循环,只要上层列表不可迭代就自动砍掉最外层,直到找到可正常执行的循环组合 - 无需手动新增代码即可支持更多嵌套层级,只要在
all_lists列表里按顺序加入新的层级列表即可 - 明确捕获
TypeError而非使用裸except,避免误吞其他代码逻辑的异常
如果你的运行环境不方便引入itertools,也可以用递归生成嵌套组合的方式替代,整体的降级尝试逻辑不需要改动。
内容的提问来源于stack exchange,提问作者Jerzy
相关产品推荐
相关产品推荐

