首页 > 百科知识 正文

Python数据结构一List使用(python 集合类型的特点)

时间:2023-11-21 01:46:41 阅读:443 作者:初恋的记忆

Python数据结构一List使用(python 集合类型的特点)-第1张

List是什么?

List顾名思义就是列表,那么它具体描述是什么呢?

列表是一个线性的集合,它允许用户在任何位置插入、删除、访问和替换元素。在python中list是保留字,List中的每个元素都有自己的编号,很像C、C 、java中的数组,但是List更强大。列表主要有以下几个特点:

  • 列表中元素顺序是有序的。比如,你将1,2,3一次存入列表,那个列表中元素顺序一定是1,2,3,而不会是其他的。
  • 列表长度不确定。不同于C/C 里的数组,列表长度不确定,在使用列表时不需要提前声明长度。
  • 列表中存储的元素类型可以不唯一。可以将任何东西加入列表中,其中元素之间可以没有任何关系。
  • 列表中可以有重复元素。

Python数据结构一List使用(python 集合类型的特点)-第2张

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一些常见函数的时间复杂度

Python数据结构一List使用(python 集合类型的特点)-第3张

常见函数的时间复杂度

Python数据结构一List使用(python 集合类型的特点)-第4张

【附加阅读】

底层实现机制

List对象是用c结构来实现,由一个保存元素的指针数组和预先分配的内存总容量构成。分离式结构,两者之间用一个元素建立一个链接,连在一起。能够根据元素的数量自动的扩充或者缩小list的内存大小。

要在内存中给集合开辟一块区域,总得先确定大小(容量),不然如何开辟?另外,确定区域后,还要知道当前已经占用了几个元素(元素个数),一旦溢出,就需要重新申请空间。要表达这种结构,有两种实现方式。一种是把头信息和元素串到一起,形成一个元素个数 2的表。另一种就是把头信息和元素分开放,两者之间用一个元素建立一个链接,连在一起。

Python数据结构一List使用(python 集合类型的特点)-第5张

存储表信息的单元与元素存储区以连续的方式安排在一块存储区里,两部分数据的整体形成一个完整的顺序表对象。一体式结构整体性强,易于管理。但是由于数据元素存储区域是表对象的一部分,顺序表创建后,元素存储区就固定了。

分离式结构中表对象里只保存与整个表有关的信息(即容量和元素个数),实际数据元素存放在另一个独立的元素存储区里,通过链接与基本表对象关联。一旦表需要扩充,对于一体式结构来说,就要重新申请一块更大的空内存区域,将所有元素放入其中,再清空旧的内存区域。对于分离式结构来说,则需要将链接地址更新一下,顺序表对象是不变的。

List的扩充采取两种策略,每次扩充增加固定数目的存储位置,这种策略可称为线性增长,节省空间,但是扩充操作频繁,操作次数多。每次扩充容量加倍,以空间换时间。从实现上来讲,在python中创建空ist时,会申请一个8个元素大小的内存区域。以后如果满了,就扩容4倍,且当元素总数达到50000时,再扩容就改为2倍。

Python数据结构一List使用(python 集合类型的特点)-第6张

,

版权声明:该问答观点仅代表作者本人。如有侵犯您版权权利请告知 cpumjj@hotmail.com,我们将尽快删除相关内容。