pin_drop当前位置:知识文库 ❯ 图文

Python列表insert()方法

概述

insert() 方法用于在列表的指定位置插入一个元素。与 append() 只能在末尾添加不同,insert() 可以在列表的任意位置插入元素,原有元素会自动向后移动。灵活使用 insert() 可以在列表的任意位置精确地添加数据。


语法

代码示例

list.insert(index, element)
参数 说明
index 插入位置的索引
element 要插入的元素,可以是任意类型

返回值None(原地修改列表)


基本用法

在指定位置插入

代码示例

fruits = ["apple", "banana", "cherry"]
fruits.insert(1, "orange")
print(fruits)

输出:

代码示例

['apple', 'orange', 'banana', 'cherry']

在列表开头插入

代码示例

nums = [2, 3, 4]
nums.insert(0, 1)
print(nums)

输出:

代码示例

[1, 2, 3, 4]

在列表末尾插入

代码示例

letters = ["a", "b", "c"]
letters.insert(len(letters), "d")
print(letters)

输出:

代码示例

['a', 'b', 'c', 'd']

提示:当 index 等于 len(list) 时,insert() 的效果等同于 append()


索引越界处理

当索引超出列表范围时,insert() 不会报错,而是将元素插入到列表的开头或末尾:

代码示例

nums = [1, 2, 3]

nums.insert(100, 4)
print("超大索引:", nums)

nums.insert(-100, 0)
print("超小索引:", nums)

输出:

代码示例

超大索引: [1, 2, 3, 4]
超小索引: [0, 1, 2, 3, 4]
索引值 插入位置
0 列表开头
len(list) 列表末尾(等同append)
> len(list) 列表末尾
< -len(list) 列表开头

性能分析

insert() 的时间复杂度为 O(n),因为在指定位置插入元素后,其后的所有元素都需要向后移动一位。

代码示例

import time

lst = list(range(1000000))

start = time.time()
lst.insert(0, -1)
end = time.time()
print(f"开头插入耗时: {end - start:.6f}秒")

start = time.time()
lst.append(-2)
end = time.time()
print(f"末尾插入耗时: {end - start:.6f}秒")

建议:如果需要频繁在列表开头插入元素,考虑使用 collections.deque,其 appendleft() 操作的时间复杂度为 O(1)。


常见应用场景

保持有序插入

代码示例

scores = [60, 70, 80, 90]
new_score = 75

for i, score in enumerate(scores):
    if new_score < score:
        scores.insert(i, new_score)
        break
else:
    scores.append(new_score)

print(scores)

输出:

代码示例

[60, 70, 75, 80, 90]

在特定条件位置插入

代码示例

data = [1, 2, 3, 4, 5]
target = 3
data.insert(data.index(target), 2.5)
print(data)

输出:

代码示例

[1, 2, 2.5, 3, 4, 5]

注意事项

性能问题:在列表开头或中间频繁使用 insert() 效率较低,因为需要移动大量元素。

原地修改insert() 是原地修改操作,返回 None,不要写成 list = list.insert(i, x)

负索引insert() 支持负索引,insert(-1, x) 会在最后一个元素之前插入,而不是之后。

代码示例

lst = [1, 2, 3]
lst.insert(-1, 99)
print(lst)

输出:

代码示例

[1, 2, 99, 3]

小结

  • insert(index, element) 在指定索引位置插入元素

  • 索引越界时自动调整到开头或末尾,不会报错

  • 时间复杂度为 O(n),频繁在开头插入建议使用 deque

  • 负索引在最后一个元素之前插入,需特别注意


练习题

练习1

编写一个函数 insert_sorted(sorted_list, value),接收一个已排序的列表和一个值,使用 insert() 将值插入到正确位置,保持列表有序。

练习2

给定列表 data = [10, 20, 30, 40, 50],在值为 30 的元素前面插入 25,在值为 50 的元素后面插入 55。打印最终结果。

常见问题

insert() 和 append() 有什么区别?

append() 只能在列表末尾添加元素,而 insert() 可以在任意指定位置插入。insert(0, x) 等同于在开头插入,insert(len(list), x) 等同于 append(x)。

insert() 索引超出范围会报错吗?

不会报错。索引大于列表长度时会插入到末尾,索引小于负的列表长度时会插入到开头。这是 insert() 的安全特性。

insert(-1, x) 会在末尾插入吗?

不会。insert(-1, x) 会在最后一个元素之前插入,而不是之后。如果想在末尾插入,应使用 append() 或 insert(len(list), x)。

insert() 的性能如何?

insert() 的时间复杂度为 O(n),因为插入位置后的所有元素都需要向后移动。频繁在开头插入时建议使用 collections.deque,其 appendleft() 操作为 O(1)。

标签: Python insert 列表插入 列表方法 索引越界 性能分析 Python教程

本文涉及AI创作

内容由AI创作,请仔细甄别

list快速访问

上一篇: Python列表extend()方法 下一篇: Python列表remove方法

poll相关推荐

作者头像 智能小晨 python

Python元组命名namedtuple

发布日期 2026-05-31
深入学习Python命名元组namedtuple,掌握字段访问、_make创建、_asdict转字典、_replace替换字段等核心方法。理解命名元组与普通元组的区别,写出更清晰易读的Python代码。
作者头像 智能小晨 python

Python元组解包

发布日期 2026-05-31
全面学习Python元组解包技巧,包括基本解包、星号扩展解包、嵌套解包、交换变量和函数多值返回。掌握优雅的Python赋值语法,让你的代码更简洁高效。
作者头像 智能小晨 python

Python元组index方法

发布日期 2026-05-31
深入学习Python元组index()方法,掌握元素索引查找技巧。了解index()语法、指定范围查找、安全查找方法和实际应用场景,避免ValueError异常,提升Python编程效率。
作者头像 智能小晨 python

Python元组count方法

发布日期 2026-05-31
深入学习Python元组count()方法,掌握元素出现次数统计技巧。了解count()语法、性能优化建议、嵌套元组统计和实际应用场景,配合练习题巩固所学知识。