Python 列表添加元素:`append()` 和 `extend()` 的区别

在 Python 中,向列表添加元素常用的方法有 append()extend()。这两个方法虽然都可以用来添加元素,但它们的行为和性能有明显的差异。

1. 行为差异

append()

  • 作用:将传入的元素作为一个整体添加到列表的末尾。

  • 示例

    python 复制代码
    output_contents = []
    content = [1, 2, 3]
    output_contents.append(content)
    print(output_contents)  # 输出:[[1, 2, 3]]

extend()

  • 作用:将传入的可迭代对象中的每个元素逐一添加到列表的末尾。

  • 示例

    python 复制代码
    output_contents = []
    content = [1, 2, 3]
    output_contents.extend(content)
    print(output_contents)  # 输出:[1, 2, 3]

2. 性能差异

append()

  • 时间复杂度:O(1),因为每次只添加一个元素。
  • 适用场景:添加单个元素时非常高效。

extend()

  • 时间复杂度:O(k),其中 k 是可迭代对象的长度。
  • 适用场景:添加多个元素时更高效,因为它只需要进行一次内存分配和复制操作。

3. 性能比较

  • 添加单个元素append() 更快,因为它只涉及一次操作。
  • 添加多个元素extend() 更快,因为它可以批量处理,减少内存分配和复制的次数。

示例代码:性能比较

python 复制代码
import time

# 添加单个元素
start_time = time.time()
output_contents = []
for i in range(10000):
    output_contents.append(i)
print(f"append() 添加单个元素耗时:{time.time() - start_time} 秒")

# 添加多个元素
start_time = time.time()
output_contents = []
content = list(range(10000))
output_contents.extend(content)
print(f"extend() 添加多个元素耗时:{time.time() - start_time} 秒")

# 添加多个元素,使用多次 append()
start_time = time.time()
output_contents = []
content = list(range(10000))
for item in content:
    output_contents.append(item)
print(f"多次 append() 添加多个元素耗时:{time.time() - start_time} 秒")

通过上述示例,可以看到在添加多个元素时,使用 extend() 方法通常比多次调用 append() 更快。因此,如果需要添加单个元素,使用 append();如果需要添加多个元素,尤其是来自一个可迭代对象,使用 extend() 会更高效。

相关推荐
ClouGence2 分钟前
SAP HANA 到 Doris 数据迁移:4 种方案对比与迁移教程
数据库·后端·dba
LVZ5 分钟前
用了半年 AI 写代码,最烦的不是代码,是环境
前端·后端·开源
dong_junshuai10 分钟前
每天一个开源项目#46 World Monitor:6.6万星、56层地图的全球情报中枢
github
云边有个稻草人12 分钟前
从一条危险的 WHERE 条件说起:金仓数据库逻辑安全警示
后端
用户77139702070612 分钟前
从一脸懵到熟练使用:我的C#CAD二次开发日常中那些“反人类“的循环技巧
后端
黄敬峰13 分钟前
从零搭建 DeepSeek-R1 WebGPU 聊天应用(一):进度条组件与 React 核心概念
面试
ShineWinsu40 分钟前
对于Linux:模版方法类的解析以及socket、TcpSocket的封装
linux·c++·面试·socket·模板方法模式·封装·tcpsocket
JaneConan44 分钟前
鸿蒙报错速查:arkts-no-any any 类型禁用,用了就炸,根因 + 真解法
后端·harmonyos
不简说1 小时前
JS 代码技巧 vol.8 — 20 个函数式编程实战,把 if/else 拍扁的骚操作
前端·javascript·面试
颜酱1 小时前
# 02 | 搭骨架:用 LangGraph 编排 12 步工作流(思路)
前端·人工智能·后端