【python从入门到放弃】1.list&tuple

列表

数组:list[]
数组追加:list.append()
数组插入索引为n的元素:list.insert(n,’’)
数组中删除最后一个元素:list.pop()
删除指定位置元素:list.pop(i)(i为索引位置)
替换某个元素:list[i]=’’

List中元素的数据类型可以不同
L = [‘Apple’,123,True]

List元素可以是另一个List
S = [‘python’,‘c++’,[‘asp’,‘java’],‘html’]
Len(S) = 4

元组

另一种有序叫元组:tuple,但tuple一旦初始化就不能修改,其余基本同list
tuple采用圆括号;list采用方括号
只有一个元素的tuple定义是必须加一个逗号(,)来消除歧义 t = (1,)

例:“可变的”tuple

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t

在这里插入图片描述

tuple的“不变”指的是,tuple的每个元素的指向永远不变,指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的。

列表(list)是动态的,长度大小不固定,可以随意地添加、删减或者改变元素(Mutable)
元组(tuple)是静态的,长度大小固定,无法删减或者改变(immutable)
两者可以通过 list() 和 tuple() 函数相互转换

list((1, 2, 3)) ——>[1,2,3]
tuple([1,2,3]) ——>(1,2,3)

在这里插入图片描述

内置函数

列表和元组常见的内置函数
l = [3, 2, 3, 7, 8, 1]
l.count(3) ——>2 ——统计列表或元组中元素出现的次数
l.index(7) ——>3 ——返回列表或元组中元素第一次出现的索引
l.reverse() ——>[1, 8, 7, 3, 2, 3] ——原地倒转列表(元组没有)
l.sort() ——>[1, 2, 3, 3, 7, 8] ——列表排序(元组没有)
reversed() 和 sorted() 同样表示对列表或元组进行倒转和排序
reversed() 返回一个倒转后的迭代器;sorted() 返回拍好序的新列表

存储方式

列表和元组存储方式的差异
列表是动态的、可变的;元组是静态的、不可变的

l = [1, 2, 3]
l.__sizeof__() ——>64

(由于列表是动态的,因此它需要存储指针,来指向对应的元素,对于int型,8字节;另外,由于列表可变,所以需要额外存储已经分配的长度大小:8字节,这样才可以实时追踪列表空间的使用情况,当空间不足时,及时分配额外空间)

tup = (1, 2, 3)
tup.__sizeof__() ——>48

空列表的存储空间为 40字节,空元组的存储空间为 24字节
在这里插入图片描述

性能

列表和元组的性能
元组比列表更加轻量级一些,总体上来说,元组的性能速度优于列表。

如果一个列表在元组中的话,其实这个元组是可变的,只是这个可变只是能改变该列表中的内容

计算初始化一个相同元素的列表和元组分别所需时间:

python -m timeit 'x= (1,2,3,4.5,6)'
python -m timeit 'x = [1,2,3,4,5,6]'

在这里插入图片描述
元组的初始化速度比列表快很多

但如果是索引操作的话,两者的速度差别非常小

python3 -m timeit -s 'x=[1,2,3,4,5,6]' 'y=x[3]'
python3 -m timeit -s 'x=(1,2,3,4,5,6)' 'y=x[3]'

在这里插入图片描述
如果想要增加/删减/改变元素,列表显然更优,因为对于元组,必须通过新建一个元组来完成。

使用场景

列表和元组的使用场景
1、如果存储的数据和数量不变,比如你有一个函数,需要返回的是一个地点的经纬度,然后直接传给前端渲染,那么选用元组更合适

def get_location():
    return(longitude, latitude)

2、如果存储的数据或数量是可变的,比如社交平台上的一个日志功能,是统计一个用户在一周之内看了哪些用户的帖子,那么使用列表更合适

猜你喜欢

转载自blog.csdn.net/if9600/article/details/112006442