0

0

Python递归遍历嵌套数据_递归实战示例

舞夢輝影

舞夢輝影

发布时间:2026-03-07 20:06:12

|

636人浏览过

|

来源于php中文网

原创

python中递归是处理嵌套数据结构最自然的方式,需明确终止条件、识别容器类型、避免无限递归和循环引用,并可通过深度限制与访问记录保障安全。

python递归遍历嵌套数据_递归实战示例

Python中递归是处理嵌套数据结构(如嵌套字典、列表、混合类型)最自然的方式之一。关键在于明确终止条件和递归调用的入口,避免无限递归或类型错误。

识别嵌套结构并设定递归出口

嵌套数据通常由 dictlisttuple 等容器类型组成,叶子节点多为字符串、数字、布尔值或 None。递归函数第一步就是判断当前对象是否为“可遍历容器”,否则直接处理或返回。

  • isinstance(obj, (dict, list, tuple)) 判断是否继续递归
  • 对 dict:分别递归处理 key 和 value(通常只递归 value,key 一般为字符串)
  • 对 list/tuple:逐项递归每个元素
  • 非容器类型(如 int、str、None)作为递归终点,执行具体逻辑(如收集、打印、修改)

基础示例:打印所有字符串值

以下函数遍历任意嵌套结构,仅打印其中所有字符串:

def print_strings(data):
    if isinstance(data, str):
        print(f"Found string: '{data}'")
    elif isinstance(data, (list, tuple)):
        for item in data:
            print_strings(item)
    elif isinstance(data, dict):
        for key, value in data.items():
            print_strings(key)   # 可选:也检查 key 是否为字符串
            print_strings(value)

调用 print_strings({"a": ["hello", {"b": "world"}], "c": 42}) 会输出:
Found string: 'a'
Found string: 'hello'
Found string: 'b'
Found string: 'world'
Found string: 'c'

实用增强:提取所有数字并求和

带返回值的递归更贴近实际需求。下面函数收集所有数字(int/float),并返回总和:

Napkin AI
Napkin AI

Napkin AI 可以将您的文本转换为图表、流程图、信息图、思维导图视觉效果,以便快速有效地分享您的想法。

下载

立即学习Python免费学习笔记(深入)”;

def sum_numbers(data):
    total = 0
    if isinstance(data, (int, float)):
        return data
    elif isinstance(data, (list, tuple)):
        for item in data:
            total += sum_numbers(item)
    elif isinstance(data, dict):
        for value in data.values():
            total += sum_numbers(value)
    return total

注意:这里跳过字符串、None、bool(bool 是 int 的子类,需在 int/float 判断前单独排除 isinstance(data, bool),否则 True==1 会被误加)。

安全递归:防止循环引用与深度超限

真实数据可能含循环引用(如 a = {}; a['self'] = a),或嵌套过深触发 RecursionError。可加入防护:

  • id()set 记录已访问对象,遇到重复 id 直接跳过
  • 增加 depth 参数,超过阈值(如 100)主动返回或抛出提示
  • 使用 try/except RecursionError 做兜底(不推荐替代主动限制)

例如加深度控制:

def safe_traverse(data, depth=0, max_depth=50):
    if depth > max_depth:
        print(f"Max depth {max_depth} reached at level {depth}")
        return
    # ... 正常递归逻辑,每次调用传入 depth + 1

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

970

2023.08.02

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

594

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

105

2025.10.23

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

594

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

105

2025.10.23

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

718

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1561

2023.10.24

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

23

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.8万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号