列表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[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) |