跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python 列表 append 与 extend 方法详解

详细对比了 Python 列表中 append 和 extend 两个方法的区别。append 用于添加单个元素,保持原对象结构;extend 用于添加可迭代对象中的多个元素,实现扁平化。通过列表、字符串、元组、字典等多种类型的示例,展示了两者在不同场景下的行为差异。文章还提供了树形结构处理和数据合并的实际应用案例,并与 + 运算符进行了对比,最后总结了选择指南。

星云发布于 2026/3/21更新于 2026/10/2597 浏览

基本定义

append() 方法
  • 作用:在列表末尾添加单个元素
  • 语法:list.append(element)
  • 特点:无论添加什么,都作为一个整体元素加入
extend() 方法
  • 作用:在列表末尾添加多个元素
  • 语法:list.extend(iterable)
  • 特点:将可迭代对象中的元素逐个加入

基础用法对比

# 基础示例
fruits = ['apple', 'banana']
# append 用法
fruits.append('orange')
print(fruits)  # ['apple', 'banana', 'orange']
# extend 用法
fruits.extend(['grape', 'mango'])
print(fruits)  # ['apple', 'banana', 'orange', 'grape', 'mango']

核心区别详解

情况 1:添加列表时的区别

list1 = [1, 2, 3]
list2 = [4, 5, 6]
# append - 将整个 list2 作为一个元素添加
list1.append(list2)
print(list1)  # [1, 2, 3, [4, 5, 6]] - 嵌套列表!
# extend - 将 list2 中的元素逐个添加
list1 = [1, 2, 3]  # 重新初始化
list1.extend(list2)
print(list1)  # [1, 2, 3, 4, 5, 6] - 扁平列表

情况 2:添加字符串时的区别

words = ['hello']
# append - 整个字符串作为一个元素
words.append()
(words)  

words = []  
words.extend()
(words)  
'world'
print
# ['hello', 'world']
# extend - 字符串被拆分为字符
'hello'
# 重新初始化
'world'
print
# ['hello', 'w', 'o', 'r', 'l', 'd']

情况 3:添加元组时的区别

numbers = [1, 2]
# append - 整个元组作为一个元素
numbers.append((3, 4))
print(numbers)  # [1, 2, (3, 4)]
# extend - 元组元素逐个添加
numbers = [1, 2]  # 重新初始化
numbers.extend((3, 4))
print(numbers)  # [1, 2, 3, 4]

情况 4:添加字典时的区别

# append 添加整个字典
my_list = ['start']
my_list.append({'a': 1, 'b': 2})
print(my_list)  # ['start', {'a': 1, 'b': 2}]
# extend 添加字典的键
my_list = ['start']  # 重新初始化
my_list.extend({'a': 1, 'b': 2})
print(my_list)  # ['start', 'a', 'b']

实际应用场景

场景 1:树形结构处理

class TreeNode:
    def get_all_nodes(self):
        """获取所有节点"""
        all_nodes = [self]  # 先添加自己
        # 对于每个子节点,递归获取其所有节点并扩展
        for child in self.children:
            all_nodes.extend(child.get_all_nodes())  # 正确:扁平化添加
            # 如果错误使用 append:
            # for child in self.children:
            #     all_nodes.append(child.get_all_nodes())  # 错误:产生嵌套列表
        return all_nodes

场景 2:数据合并

# 合并多个数据源
def merge_data_sources(*sources):
    merged_data = []
    for source in sources:
        if isinstance(source, list):
            merged_data.extend(source)  # 合并列表
        else:
            merged_data.append(source)  # 添加单个元素
    return merged_data

# 使用示例
result = merge_data_sources(
    [1, 2, 3], 'hello', (4, 5), [6, 7]
)
print(result)  # [1, 2, 3, 'hello', (4, 5), 6, 7]

与其他方法的对比

# 与 + 运算符对比
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# extend - 原地修改
list1.extend(list2)
print(list1)  # [1, 2, 3, 4, 5, 6]
# + 运算符 - 创建新列表
list1 = [1, 2, 3]
new_list = list1 + list2
print(new_list)  # [1, 2, 3, 4, 5, 6]
print(list1)  # [1, 2, 3] - 原列表不变

总结对比表

特性append()extend()
参数单个元素可迭代对象
结果添加整个对象作为元素添加可迭代对象中的每个元素
内存较少修改可能涉及更多内存操作
性能O(1)O(k),k 为可迭代对象长度
适用场景添加单个元素合并多个元素
返回值None(原地修改)None(原地修改)
嵌套处理可能产生嵌套保持扁平结构

选择指南

使用 append() 当:

  • 添加单个元素
  • 元素本身需要保持完整结构
  • 不确定元素类型时

使用 extend() 当:

  • 处理已知的可迭代对象
  • 需要扁平化结构时
  • 合并多个元素

目录

  1. 基本定义
  2. append() 方法
  3. extend() 方法
  4. 基础用法对比
  5. 基础示例
  6. append 用法
  7. extend 用法
  8. 核心区别详解
  9. 情况 1:添加列表时的区别
  10. append - 将整个 list2 作为一个元素添加
  11. extend - 将 list2 中的元素逐个添加
  12. 情况 2:添加字符串时的区别
  13. append - 整个字符串作为一个元素
  14. extend - 字符串被拆分为字符
  15. 情况 3:添加元组时的区别
  16. append - 整个元组作为一个元素
  17. extend - 元组元素逐个添加
  18. 情况 4:添加字典时的区别
  19. append 添加整个字典
  20. extend 添加字典的键
  21. 实际应用场景
  22. 场景 1:树形结构处理
  23. 场景 2:数据合并
  24. 合并多个数据源
  25. 使用示例
  26. 与其他方法的对比
  27. 与 + 运算符对比
  28. extend - 原地修改
  29. + 运算符 - 创建新列表
  30. 总结对比表
  31. 选择指南

更多推荐文章

查看全部
  • OPENWEBUI 与传统手工开发电商详情页效率对比
  • Linux Makefile 自动化编译实战指南及进度条实现
  • Docker 容器内 Java 与 Python 代码运行示例
  • OpenClaw 全平台安装部署教程(Windows/macOS/云服务器)
  • 滑动窗口算法详解:从入门到实战
  • 基于 Higress 将 REST API 转换为 MCP Server 工具
  • 基于 Langchain-Chatchat 快速构建本地 LLM 智能知识库
  • 基于 Python 与 Flask 的黑龙江旅游景点数据分析系统设计与实现
  • 2024 年多模态大模型技术发展白皮书
  • 线性 DP 经典四题详解:台阶、子段和、传球与乌龟棋
  • C++ STL map与set底层结构及迭代器实现详解
  • AIGC 核心技术解析:GPT、BERT 与 Transformer 工作原理
  • JavaScript 中 this 的解析:从 call、bind 到箭头函数
  • MNE-Python 绘制 fNIRS 脑地形图及数据预处理
  • 自然语言处理在客户服务中的实战应用
  • C++ 模板机制详解:参数、特化与分离编译
  • Windows 本地部署 Ollama 大模型:Qwen3.5 实战与并发优化
  • VSCode Copilot 接入智谱 GLM-4 及任意大模型方案
  • Linux 远程连接 Windows 桌面配置指南
  • 基于 VMware 与 CentOS 7 的 Hadoop 伪分布式集群部署

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online