Python 列表(List)底层是 动态数组,内存连续存储。删除元素时,若删除的不是末尾元素,需将后续元素向前“平移”填补空位——这是时间复杂度的核心影响因素(平移操作的时间成本)。
[start, end) 的元素后,原列表中 end 之后的所有元素,需要向前平移 (end - start) 个位置(填补删除后的空位)。[0,1,2,3,4,5,6],删除 [2:6](元素 2,3,4,5): 6-2=4;6(仅 1 个),平移距离 4;[0,1,2,3,4,5,6],删除 [1:3](元素 1,2): 3,4,5,6(4 个),平移距离 2;list[:k] = []):需平移 n-k 个元素(n 是列表总长度),时间复杂度 O(n);list[-k:] = []):无需平移元素(末尾删除,直接截断),时间复杂度 O(1)。[1,2,3,...,1000],删除所有偶数(500 个元素):需遍历 1000 个元素,时间复杂度 O(1000) = O(n)。[1,2,3,...,1000],删除所有奇数(500 个元素): 方案 | 时间复杂度(最坏情况) | 时间复杂度(最优情况) | 核心影响因素 |
|---|---|---|---|
切片赋值删除(连续) | O(n) | O(1) | 需平移的元素个数(删除位置越靠后,越快) |
列表推导式 | O(n) | O(n) | 列表总长度(与删除元素数量无关) |
倒序遍历删除 | O(n²) | O(n) | 删除元素的数量和位置(删除越多,越慢) |
set 交集过滤 | O(n) | O(n) | 列表总长度(哈希表操作效率高) |
例如:删除列表前 1000 个元素(n=10000),切片赋值删除需平移 9000 个元素(O(9000)),而列表推导式需遍历 10000 个元素(O(10000)),此时切片赋值更高效;若删除列表后 1000 个元素,切片赋值无需平移(O(1)),远快于列表推导式。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。