Python - List + Tuple
基础
列表和元组都是可以放置任意数据类型的有序集合 - 绝大多数编程语言,集合的数据类型必须一致
python
1 | l = [1, 2, 'hello', 'world'] |
列表是动态的(mutable),而元组是静态的(immutable)
python
1 | l = [1, 2, 3, 4] # mutable |
为元组追加新元素,只能新建元组
python
1 | t1 = (1, 2, 3, 4) |
为列表追加新元素,可以直接追加到列表末尾
python
1 | l = [1, 2, 3, 4] |
列表和元组都支持负数索引,其中 -1 表示最后一个元素
python
1 | l = [1, 2, 3, 4] |
列表和元组均都支持切片操作 - 左闭右开
json
1 | l = [1, 2, 3, 4] |
列表和元组均支持随意嵌套
python
1 | l = [[1, 2, 3], [4, 5]] |
列表和元组可以通过 list() 和 tuple() 函数相互转换
python
1 | t = list((1, 2, 3)) |
常用内置函数
python
1 | l = [3, 2, 3, 7, 8, 1] |
python
1 | t = (3, 2, 3, 7, 8, 1) |
Built-in | Desc |
---|---|
count(item) | 统计列表或元组中 item 出现的次数 |
index(item) | 返回列表或元组中 item 第一次出现的索引 |
list.reverse() / list.sort() | 列表的原地倒转和排序,而 元组是 immutable 的,不支持原地操作 |
reversed() | 对列表或者元组进行倒转,返回一个倒转后的迭代器,可以再使用 list() 转换为列表 |
sorted() | 对列表或者元组进行排序,返回一个排序后的新列表 |
存储
python
1 | l = [1, 2, 3] |
- 存储同样的元素,列表比元组多 16 字节
- 由于列表是动态的,需要存储指针,来指向对应的元素,8 字节
- 由于列表是可变的,需要额外存储已经分配的长度大小(追踪列表空间的使用情况),8 字节
python
1 | l = [] |
- 为了减少每次增加操作的空间分配开销,每次分配空间都会额外多分配一些 - over-allocating
- 增加删除的时间复杂度均为 O(1)
- 元组长度大小固定,元素不可变,所以存储空间固定
性能
- 元组比列表更轻量级,总体上来说,元组的性能速度要略优于列表
- 对于一些静态变量,如元组,如果它不被使用并占用空间不大时,Python 会暂时缓存这部分内存
- 下次再创建同样大小的元组,Python 不需要再向 OS 申请内存,加快 Python 程序运行速度
初始化一个相同元素的列表和元组,元组的初始化速度,比列表快 5 倍
plaintext
1 | python3 -m timeit 'x=(1,2,3,4,5,6)' |
对于索引操作,列表与元组的速度差不多
plaintext
1 | python3 -m timeit -s 'x=[1,2,3,4,5,6]' 'y=x[3]' |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.