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

Python中列表的蛇形遍历通用实现方法问询

通用蛇形遍历二维列表的实现方案

我来给你分享一个通用、易扩展的蛇形遍历实现思路,完美适配子列表数量增减、子列表长度变化(甚至不规则二维列表)的场景,逻辑清晰且不需要硬编码特定结构的判断。

核心思路

这种蛇形遍历本质是螺旋式的外围分层遍历,我们可以通过「方向切换+访问标记」的方式来实现:

  1. 定义四个遍历方向:右、下、左、上,按顺序循环切换
  2. 从矩阵的左上角开始遍历,每访问一个元素就标记它
  3. 每次计算下一个位置,如果位置不合法(超出矩阵范围、元素不存在、已被访问),就切换方向,重新计算下一个合法位置
  4. 直到所有元素都被访问完为止

代码实现(Python)

def snake_traverse(matrix):
    if not matrix:
        return []
    
    result = []
    visited = set()
    total_elements = sum(len(row) for row in matrix)
    rows_count = len(matrix)
    
    # 定义遍历方向:右、下、左、上
    directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
    current_dir = 0  # 初始方向为右
    current_row, current_col = 0, 0
    
    while len(result) < total_elements:
        # 加入当前元素并标记已访问
        result.append(matrix[current_row][current_col])
        visited.add((current_row, current_col))
        
        # 计算下一个位置
        next_row = current_row + directions[current_dir][0]
        next_col = current_col + directions[current_dir][1]
        
        # 检查下一个位置是否合法:行在范围内、列在当前行的范围内、未被访问
        is_valid = False
        if 0 <= next_row < rows_count:
            if 0 <= next_col < len(matrix[next_row]) and (next_row, next_col) not in visited:
                is_valid = True
        
        # 如果不合法,切换方向重新计算下一个位置
        if not is_valid:
            current_dir = (current_dir + 1) % 4
            next_row = current_row + directions[current_dir][0]
            next_col = current_col + directions[current_dir][1]
        
        # 更新当前位置
        current_row, current_col = next_row, next_col
    
    return result

测试你的示例

用你提到的输入矩阵测试:

matrix = [
    [1, 2, 3, 4],
    [5, 6, 7, 8],
    [9, 10, 11, 12]
]
print(snake_traverse(matrix))
# 输出:[1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7]

完全符合你的期望输出。

为什么这个方案通用且可扩展?

  • 适配任意行数/列数:不管是2行、5行还是更多,只要矩阵非空就能处理,不需要修改代码
  • 支持不规则子列表:即使有的子列表长、有的短(比如[[1,2], [3], [4,5,6]]),代码会自动判断位置合法性,不会出现索引越界
  • 易扩展方向:如果需要改变遍历起始点或者方向顺序(比如从右下角开始、或者初始方向改为下),只需要调整directions数组的顺序或者初始的current_row/current_col即可
  • 逻辑清晰:用循环+方向控制替代硬编码的索引判断,后期维护和修改都很方便

内容的提问来源于stack exchange,提问作者JD2775

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:55:07