列表和元祖基础

mac2024-12-09  37

一、列表和元祖

python中最常见的两种数据结构:列表(list)和元祖(tuple);

列表和元祖都是有序的,可以放置任意数据类型的有序集合,在大多数编程语言中,集合的数据类型必须一致,但对于列表和元祖来说并无此要求;列表和元祖都支持负数索引,-1表示最后一个元素,-2表示倒数第二个元素‘列表和元祖支持切片操作,括号为前闭后开;可通过list()和tuple()函数相互转化;

二、区别

列表是动态的,可以随意增加、删除、修改元素(mutable);元祖是静态的,长度固定,无法增加、删减或改变(imutable);

若果元祖想要增加元素,需要开辟一块新的内存,创建新的元祖后,再将原来元祖的值填充进去;

列表和元祖存储方式的差异,放置相同元素,元祖的存储空间要比列表少8字节(自己实践是8字节,但是课程中讲要少16字节),因为列表还需要存储指针,来指向对应的元素,由于列表可变,还需要存储已经分配的长度大小,当空间不足时,会额外分配空间;列表和元祖性能的差异,元祖比列表更轻量一些,所以元祖的性能要略优于列表;python在后台会对静态数据做缓存,所以下次在创建同样大小的元祖时,python就不用向操作系统发起请求申请缓存,而是直接分配之前已经缓存的内存空间,这样可大大加快程序的运行速度; 元祖的初始化速度要比列表快5倍;索引操作两者几乎没有影响;新增、修改、删除操作时,列表的性能要优于元祖,因为对于元祖,要生成一个新的元祖;

三、使用场景

如果存储的数据和数量不变,后台数据直接返回给前端渲染,则可使用元祖更合适;如果存储的数据和数量是可变的,如日志功能统计用户浏览的帖子数,则使用列表更合适;

l = [3, 2, 3, 7, 8, 1]

l.count(3)                     //元素出现的次数

2

l.index(7)                //元素所在列表/元祖第一次出现的位置

3

l.reverse()

l

[1, 8, 7, 3, 2, 3]

l.sort()

l

[1, 2, 3, 3, 7, 8]

 

tup = (3, 2, 3, 7, 8, 1)

tup.count(3)

2

tup.index(7)

3

list(reversed(tup))          //元祖进行反转后生成一个新的元祖

[1, 8, 7, 3, 2, 3]

sorted(tup)                   //元祖进行排序后生成一个新的元祖

[1, 2, 3, 3, 7, 8]

 

 

最新回复(0)