list-列表常用操作和时间复杂度分析

列表list是动态创建的,也就是说列表占用的内存空间可以不断发生变化。

增加列表数据
操作 解释 时间复杂度
list.append(x) list末尾添加数据x O(1)
list.insert(index, x) index索引位置插入x,后面的元素往后移一个单位 O(N)

删除列表元素
操作 解释 时间复杂度
list.pop(index) 删除并返回list[index] O(N)
del list[index] 仅删除list[index] O(N)
list.pop() 删除并返回最后一个元素 O(1)
list.remove(x) 删除下标最小的list中的x O(N)

查找元素
list[index] 返回下标index元素,index>=0 O(1)
list[-index] 返回倒数第index个元素,index>=0 O(1)

修改list
list[index]  = x   O(1)

排序

排序
list.sort() 在原列表上进行排序 O(N*logN)
sorted(list) 返回排序后的列表,但是原列顺序不变 同上

 

切片

切片非常重要,在任何项目中,都会用的到的一种非常好用的方法。但是使用不合理,会增加时间复杂度。

 

切片 等价于 拷贝一个副本,需要消耗一定的时间复杂度进行切割,如果切片进行赋值后,将存储在新的内存中,此时切片和原列表是两块内存空间。例如:a = b[5:10]。深拷贝

而简单的列表赋值,两个变量将指向同一个存储单元, a = b。 此时a 和b完全等价,只是变量名不用。

切片
list[x:y] 返回list列表下标x ~ y-1 的子列表 O(N)
将切片(副本)传给函数,可以防止函数修改原列表数据

 

其他常用操作

常用操作
list.reverse() 原列表元素倒序 O(N)
len(list) 列表长度 O(1)
list(range(5)) 创建数字列表 O(N)

max(list),

min(list),

sum(list)

求列表最大值,最小值,求和 O(N)
x = [t**2 for t in range(5)] 列表解析,快速生成满足某规律的列表 O(N)

 

你可能感兴趣的:(Python)