You need to enable JavaScript to run this app. 如何重构两个存在重复逻辑的Python嵌套遍历函数以消除代码冗余
优惠活动
大模型
产品
解决方案
定价
更多

如何重构两个存在重复逻辑的Python嵌套遍历函数以消除代码冗余

行列遍历异序的重复Python函数通用合并方案

核心实现逻辑

两个函数的唯一差异仅为嵌套遍历的顺序,判断逻辑、命中后的处理逻辑完全一致时,不需要重复编写固定逻辑代码,只需要把可变的遍历顺序抽象为可传入的参数,动态生成对应遍历坐标序列即可。

具体实现步骤

  • 给通用函数新增遍历顺序控制参数,支持传入row_first(先行后列)、col_first(先列后行)两种模式
  • 根据传入的遍历顺序,动态生成对应的(row, col)坐标遍历序列,不硬编码嵌套for循环顺序
  • 将条件判断、单元格数值自增、后续关联代码(即原# more code对应的逻辑)全部放在坐标遍历循环中,仅编写一次,实现全场景复用

合并前后的代码对比

重复编写的原有冗余代码

# 先行后列遍历版本
def traverse_row_first(board):
    row_cnt = len(board)
    col_cnt = len(board[0])
    for row in range(row_cnt):
        for col in range(col_cnt):
            # 与另一函数完全一致的判断逻辑
            if board[row][col] < 0:
                board[row][col] += 1
                # 原more code 关联逻辑
                pass

# 先列后行遍历版本
def traverse_col_first(board):
    row_cnt = len(board)
    col_cnt = len(board[0])
    for col in range(col_cnt):
        for row in range(row_cnt):
            # 完全复制的重复判断逻辑
            if board[row][col] < 0:
                board[row][col] += 1
                # 完全复制的more code 关联逻辑
                pass

合并后的通用单函数实现

def unified_board_traverse(board, traverse_order="row_first"):
    row_cnt = len(board)
    col_cnt = len(board[0])
    # 仅根据遍历顺序生成对应坐标序列
    if traverse_order == "row_first":
        coord_iter = ((row, col) for row in range(row_cnt) for col in range(col_cnt))
    elif traverse_order == "col_first":
        coord_iter = ((row, col) for col in range(col_cnt) for row in range(row_cnt))
    else:
        raise ValueError("仅支持传入row_first(先行后列)/ col_first(先列后行)两种遍历顺序")

    # 以下逻辑仅编写一次,两个遍历模式完全复用
    for row, col in coord_iter:
        # 原有统一的条件判断逻辑
        if board[row][col] < 0:
            board[row][col] += 1
            # 原有统一的more code 关联逻辑
            pass

方案优势

  • 彻底消除重复代码,后续修改判断逻辑、处理逻辑时,只需要修改一处即可同时覆盖两种遍历场景
  • 后续如果新增其他遍历顺序(比如斜向遍历、Z字遍历),只需要在坐标生成部分新增对应分支即可,不需要重复编写核心处理逻辑

内容的提问来源于stack exchange,提问作者Kun.tito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 14:57:03