List是什么?
List顾名思义就是列表,那么它具体描述是什么呢?
列表是一个线性的集合,它允许用户在任何位置插入、删除、访问和替换元素。在Python中list是保留字,List中的每个元素都有自己的编号,很像C、C++、java中的数组,但是List更强大。列表主要有以下几个特点:
- 列表中元素顺序是有序的。比如,你将1,2,3一次存入列表,那个列表中元素顺序一定是1,2,3,而不会是其他的。
- 列表长度不确定。不同于C/C++里的数组,列表长度不确定,在使用列表时不需要提前声明长度。
- 列表中存储的元素类型可以不唯一。可以将任何东西加入列表中,其中元素之间可以没有任何关系。
- 列表中可以有重复元素。
List简单使用
1. 列表创建
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
此外,如果创建一些常用的数列等列表,可采取以下pythonic的方法快速创建列表:
2. 列表访问
列表访问和其他数组访问差不多,常用索引。但是python列表可以切片,可以取指定索引区间内的元素。
3. 操作列表的函数
- len(list):列表元素个数
- max(list):返回列表元素最大值
- min(list):返回列表元素最小值
- list(seq):将元组转换为列表
- del:删除列表,释放内存空间
例子:
3. 列表类型定义的函数
- list.append(obj):在列表末尾添加新的对象
- list.count(obj):统计某个元素在列表中出现的次数
- list.extend(seq):在列表末尾一次性追加另一个序列中的多个值
- list.index(obj):从列表中找出某个值第一个匹配项的索引位置
- list.insert(index, obj):将对象插入列表
- list.pop(obj=list[-1]):移除列表中的一个元素(默认最后一个元素),并返回
- list.remove(obj):移除列表中某个值的第一个匹配项
- list.reverse():反向列表中元素
- list.sort([func]):对原列表进行排序
例子:
list一些常见函数的时间复杂度
【附加阅读】
底层实现机制
List对象是用c结构来实现,由一个保存元素的指针数组和预先分配的内存总容量构成。分离式结构,两者之间用一个元素建立一个链接,连在一起。能够根据元素的数量自动的扩充或者缩小list的内存大小。
要在内存中给集合开辟一块区域,总得先确定大小(容量),不然如何开辟?另外,确定区域后,还要知道当前已经占用了几个元素(元素个数),一旦溢出,就需要重新申请空间。要表达这种结构,有两种实现方式。一种是把头信息和元素串到一起,形成一个元素个数+2的表。另一种就是把头信息和元素分开放,两者之间用一个元素建立一个链接,连在一起。
存储表信息的单元与元素存储区以连续的方式安排在一块存储区里,两部分数据的整体形成一个完整的顺序表对象。一体式结构整体性强,易于管理。但是由于数据元素存储区域是表对象的一部分,顺序表创建后,元素存储区就固定了。
分离式结构中表对象里只保存与整个表有关的信息(即容量和元素个数),实际数据元素存放在另一个独立的元素存储区里,通过链接与基本表对象关联。一旦表需要扩充,对于一体式结构来说,就要重新申请一块更大的空内存区域,将所有元素放入其中,再清空旧的内存区域。对于分离式结构来说,则需要将链接地址更新一下,顺序表对象是不变的。
List的扩充采取两种策略,每次扩充增加固定数目的存储位置,这种策略可称为线性增长,节省空间,但是扩充操作频繁,操作次数多。每次扩充容量加倍,以空间换时间。从实现上来讲,在python中创建空ist时,会申请一个8个元素大小的内存区域。以后如果满了,就扩容4倍,且当元素总数达到50000时,再扩容就改为2倍。