Python list-列表

Python list-列表

列表的内部结构

头部保存元素数量,内存分配计数
独立数组存储元素指针

在这里插入图片描述

操作时间复杂度

操作时间复杂度
复制O(N)
添加元素(在尾部添加)O(1)
插入元素(在指定位置插入)O(N)
获取元素O(1)
修改元素O(1)
删除元素O(N)
遍历O(N)
获取长度为k的切片O(k)
删除切片O(N)
列表扩展O(k)
测试是否在列表中O(N)
min()/max()O(n)
获取列表长度O(1)

操作:

加法运算符链接多个列表,乘法赋值内容

del:删除index的元素,或切片指定删除范围

切片:

​ 返回切片时创建新列表对象,并复制相关指针数据到新数组。

​ 除了引用目标相同外,对列表自身的修改互不影响

注意:

​ 复制的是指针(引用)

​ 对目标元素修改是共享(因为列表元素存储是引用)

sorted

返回新的列表,接受任何可迭代对象作为参数

bisect.insort

bisect模块,可向有序列表插入元素

它使用二分查找合适的位置,可用来实现优先级队列或一致性哈希算法

List有几个特点:

1.元素有位置下标,以索引就可以直接取到元素 --> 连续的存储空间,以偏移量计算取得元素,不必遍历所有元素

2.元素无论如何改变,表对象不变,也就是其id不变 --> 分离式结构,表头和元素内容分开储存,这样在更改list时,表对象始终是同一个,只是其指向的地址不同

3.元素可以是任意类型 --> 既要要求是连续存储,又可以存储不同类型的数据,那么其用的就是元素外置的方式,存储的只是地址的引用

4.可以任意添加新元素 --> 要能不断地添加新元素,其使用了动态扩充的策略

从实现上来讲,在python中创建空ist时,会申请一个8个元素大小的内存区域。以后如果满了,就扩容4倍,且当元素总数达到50000时,再扩容就改为2倍。

https://www.cnblogs.com/yifeixu/p/8893823.html

元组

从操作上讲,只读版本的list

支持与列表类似的运算符操作,但不能修改,返回新对象

内容固定,内存固定

数组

元素单一类型

内容嵌入

避免对象的额外开销,减少了活跃对象的数量和内存分配的次数

长度不固定,按需扩展或收缩内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值