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

Python 列表 insert 方法:在指定位置插入元素

Python 列表 insert 方法用于在指定索引位置插入元素,区别于 append 和 extend。通过 insert 可保持列表有序,无需追加后重新排序。文章结合示例演示了 insert 用法,对比了 append、insert、extend 的区别,并深入探讨了底层排序机制,如插入排序与 Timsort 算法的历史及复杂度分析(O(n log n)),说明了有序列表对快速查找和后续插入的重要性。

利刃发布于 2026/3/16更新于 2026/10/17109 浏览

Python 列表 insert 方法:在指定位置插入元素

基础概念回顾

类别核心定义关键特征简单示例
方法依附于类/对象谁调用就改谁sl.reverse() / sl.sort()
函数实现特定功能调用时把列表当参数传进去sorted(sl)
参数函数/方法输入变量根据参数实现功能sorted(reverse=True) / sl.sort(reverse=True)

排好序的列表即为有序列表。向有序列表新插列表项,需要讲究位置。插入后,有序列表还得依然有序。

图片描述

追加与排序

nl = list(range(0, 10, 3))
print(nl)
nl.append(5)
print(nl)
nl.sort()
print(nl)

排好序的列表,再追加新列表项,还得再排序。是否可以在合适的位置直接插入?

图片描述

使用 insert 方法

查看手册可知,list 有个方法叫做 insert。

help(list.insert)

可以在指定索引之前插入。

图片描述

查找索引

复原列表:

nl = [0, , , ]
3
6
9

应该在谁之前插入?例如 5 应该插在 6 之前。6 的索引是多少呢?

nl.index(6)

6 的索引是 2。在第 2 个列表项之前插入。

执行插入
print(nl)
nl.insert(2, 5)
print(nl)

效果合适,插入后的列表依然有序。

图片描述

append、insert 与 extend 的区别

方法功能
append末尾添加元素
insert指定索引位置插元素
extend将其元素逐个添加到末尾

观察区别:

图片描述

插入与排序算法

可以利用插入来排序吗?这就是插入排序。把列表中的每个列表项都按顺序插入空列表,就得到了排好序的新列表。

list.sort 用的就是插入排序。

图片描述

Timsort 算法来源

找到 binary sort 相关源码:https://github.com/python/cpython/blob/main/Objects/listobject.c

这是排序算法的核心,二叉树的搜索。

图片描述

通过二叉树找到位置,然后把新元素插入。每次插入只需要 log(n) 次比较。总共 n 个位置,每个都要找到合适的值。所以外层循环次数 * 内层循环次数 = n * log(n)。

图片描述

Big O Notation

各种排序算法的对比:

图片描述

图片描述

Timsort 是谁写的?回到 1998 年,Guido 还在荷兰孤军奋战,Tim 通过电子邮件把代码发给了 Guido。

插入排序提交记录:https://github.com/python/cpython/commit/82e6a8f80deaecc7ba3a1bd66dda7c1988c72dbf

Tim 写下了插入排序的方法。这个函数一度被叫做 timsort,可见 Guido 对于 Tim 认可和推举。

def timsort(the_array):
    runs, sorted_runs = [], []
    length = len(the_array)
    new_run = [the_array[0]]
    for i in range(1, length):
        if i == length - 1:
            new_run.append(the_array[i])
            runs.append(new_run)
            break
        if the_array[i] < the_array[i-1]:
            if not new_run:
                runs.append([the_array[i]])
                new_run.append(the_array[i])
            else:
                runs.append(new_run)
                new_run = []
        else:
            new_run.append(the_array[i])
    for item in runs:
        sorted_runs.append(insertion_sort(item))
    sorted_array = []
    for run in sorted_runs:
        sorted_array = merge(sorted_array, run)
    print(sorted_array)

timsort([2, 3, 1, 5, 6, 7])

总结

定点插入 insert 相对原来的追加 append。排好序之后,想要保持有序,需要 insert 定点插入。

图片描述

两者相互成就,排序支撑插入,插入延续排序。

目录

  1. Python 列表 insert 方法:在指定位置插入元素
  2. 基础概念回顾
  3. 追加与排序
  4. 使用 insert 方法
  5. 查找索引
  6. 执行插入
  7. append、insert 与 extend 的区别
  8. 插入与排序算法
  9. Timsort 算法来源
  10. Big O Notation
  11. 总结

更多推荐文章

查看全部
  • 基于 OpenClaw 与微信实现 AI 自动回复接入流程
  • 机器人通讯架构选型:CAN/FD、RS485、EtherCAT 对比分析
  • OpenAI 指控 DeepSeek 模型蒸馏,字节发布 Seedance 2.0 与 Java 26 现状
  • Microi 吾码:高效灵活的低代码开发开源框架
  • 基于微信小程序的校园拼车出行平台设计与实现
  • HarmonyOS 游戏开发实践:按钮与文字精准控制详解
  • Linux 从硬件硬盘到文件系统的全面过渡
  • Vue3 方法调用报错“不存在”?多半是少写了这个属性
  • 飞书机器人图片消息发送实战及常见报错解决方案
  • Python 协程的两种核心实现:生成器与原生协程对比
  • 春晚机器人亮相,A 股板块为何高开低走?
  • Python 基础入门:变量概念与数据类型详解
  • Java 大厂实习面试核心考点:数据库、中间件与基础原理
  • 使用 Rokid 灵珠平台搭建旅游 AR 智能体
  • Windows 系统下安装 Ubuntu 双系统详细教程
  • PowerShell Invoke-WebRequest 报错 Invalid URL 和 CommandNotFound 排查指南
  • 构建与 GitHub 深度集成的自动化工作流指南
  • Python 基础语法与数学建模应用指南
  • C++ 虚函数与纯虚函数:多态机制详解
  • GitHub Desktop 中文界面汉化方案与工具使用指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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