如何将7人晚餐排列统计的重复Python代码优化为函数?
简化排列统计代码方案
原代码通过多次遍历列表重复判断相似条件,可通过单次遍历+逻辑封装大幅简化:
简化后代码
import math # 若使用自定义combination函数,替换此处即可 # 你的排列列表 lst = [['0', '1', '2', '3', '4', '5', '6'], ['0', '1', '2', '3', '4', '6', '5'], ...] counts = {k: 0 for k in range(8)} # 初始化0-7的计数字典 def get_target_k(perm): # 计算当前排列对应的目标k值 prefix_match = 0 # 统计前缀连续匹配的长度 for i in range(7): if perm[i] == str(i): prefix_match += 1 else: break # 验证剩余位置是否完全不匹配 for i in range(prefix_match, 7): if perm[i] == str(i): return None # 剩余位置存在匹配,不符合原逻辑中任何k的条件 return prefix_match # 单次遍历完成所有计数 for perm in lst: k = get_target_k(perm) if k is not None: counts[k] += math.comb(7, k) # 替换为你的combination函数(若自定义)
优化说明
- 减少重复遍历:仅遍历一次
lst,避免原代码中重复循环8次的冗余操作。 - 逻辑封装复用:将排列的匹配判断逻辑封装到
get_target_k函数中,统一处理前缀匹配长度验证与剩余位置校验,代码更易读、易维护。 - 简洁初始化:用字典推导式
{k:0 for k in range(8)}替代手动逐个键值对初始化,更简洁高效。
内容的提问来源于stack exchange,提问作者Miraç Buğra Özkan
相关产品推荐
相关产品推荐

