You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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函数(若自定义)

优化说明

  1. 减少重复遍历:仅遍历一次lst,避免原代码中重复循环8次的冗余操作。
  2. 逻辑封装复用:将排列的匹配判断逻辑封装到get_target_k函数中,统一处理前缀匹配长度验证与剩余位置校验,代码更易读、易维护。
  3. 简洁初始化:用字典推导式{k:0 for k in range(8)}替代手动逐个键值对初始化,更简洁高效。

内容的提问来源于stack exchange,提问作者Miraç Buğra Özkan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:45:36