pin_drop当前位置:知识文库 ❯ 图文
Python列表insert()方法
概述
insert() 方法用于在列表的指定位置插入一个元素。与 append() 只能在末尾添加不同,insert() 可以在列表的任意位置插入元素,原有元素会自动向后移动。灵活使用 insert() 可以在列表的任意位置精确地添加数据。
语法
代码示例
list.insert(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]性能分析
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)。
本文涉及AI创作
内容由AI创作,请仔细甄别