python系列 - 列表和元组

列表和元组基础

什么是列表和元组

  • 都是一个可以方式任意数据类型的有序集合

对于python而言,集合中的数据类型可以不一致,如下:

# 列表中同时含有int和string类型的元素
list1 = [1,2,'hello','world']

# 元组中同时含有int和string类型的元素
tup = ('jason', 22) 

列表和元组的区别

  • 列表是动态的:长度大小不固定,可以随意增加、删减或者改变元素(mutable)

  • 元组是静态的:长度大小固定,无法增加删减或者改变(immutable)

  • 即列表是可变的,元组是不可变的

举个栗子

l = [1, 2, 3, 4]
# 和很多语言类似,python中索引同样从0开始,l[3]表示访问列表的第四个元素
l[3] = 40 
print(l)
# 打印结果如下
[1, 2, 3, 40]

tup = (1, 2, 3, 4)
tup[3] = 40
# 控制台报错信息
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

列表和元组的基本操作

索引

python中的列表和索引都支持负数,-1表示最后一个元素,-2表示倒数第二个元素...

同样的栗子

l = [1, 2, 3, 4]
print(l[-1])
# 打印结果如下
4

tup = (1,2,3,4)
print(tup[-1])
# 打印结果如下
4

切片

l = [1, 2, 3, 4]
l[1:3] # 返回列表中索引从1到2的子列表
[2, 3]

tup = (1, 2, 3, 4)
tup[1:3] # 返回元组中索引从1到2的子元组
(2, 3) 

🌸 ATTENTION:

  • 切片的区间,左闭右开

嵌套

列表和元组可以相互嵌套

l = [[1, 2, 3], [4, 5]] # 列表的每一个元素也是一个列表
tup = ((1, 2, 3), (4, 5, 6)) # 元组的每一个元素也是一个元组

当然元组和列表之间也可以通过list()tuple()相互转换

# 将元组转换成列表——list
list((1, 2, 3))
[1, 2, 3]
# 将列表转换成元组——tuple
tuple([1, 2, 3])
(1, 2, 3)

常用函数

count(item)表示统计列表/元组中 item 出现的次数。

index(item)表示返回列表/元组中 item 第一次出现的索引。

list.reverse()list.sort() 分别表示原地倒转列表和排序(注意,元组没有内置的这两个函数)。

  • reversed()sorted() 同样表示对列表/元组进行倒转和排序
  • reversed() 返回一个倒转后的迭代器
  • sorted()返回排好序的新列表。

列表和元组的存储方式

  • 前面有提到过,由于列表是可变的,所以在存储的时候需要额外地分配存储空间,去追踪列表空间的使用情况,当空间不足时,及时分配额外空间

  • 元组长度大小固定,元素不可变,所以存储空间固定

  • 元组要比列表更加轻量级一些

列表和元组的性能

  • 由于二者存储方式的差异,所以总的来说元组的性能要略优于列表
  • 由于元组是静态数据,python在后台会对静态数据做资源缓存
  • 通常来说,因为垃圾回收机制的存在,如果一些变量不被使用了,Python 就会回收它们所占用的内存,返还给操作系统,以便其他变量或其他应用使用。但是对于一些静态变量,比如元组,如果它不被使用并且占用空间不大时,Python 会暂时缓存这部分内存。这样,下次我们再创建同样大小的元组时,Python 就可以不用再向操作系统发出请求,去寻找内存,而是可以直接分配之前缓存的内存空间,这样就能大大加快程序的运行速度。
posted @ 2021-10-28 12:48  莫伊101  阅读(45)  评论(0编辑  收藏  举报