这是我参与更文挑战的第 5 天,活动详情查看: 更文挑战
「本文已参与 周末学习计划,点击查看详情 」
1.基本简述
1.1 序列
序列是Python中最基本的数据结构。序列是一种数据存储方式,用来存储一系列的数据。
在内存中,序列就是一块用来存放多个值的连续的内存空间。比如一个整数序列[10,20,30,40]
序列中的每个元素都分配一个数字 - 它的位置,或索引。第一个索引是0,第二个索引是1,依此类推。
1.2 列表
列表:用于存储任意数目、任意类型的数据集合。
列表是内置可变序列,是包含多个元素的有序连续的内存空间。列表定义的标准语法格式:
a = [10,20,30,40]
其中,10,20,30,40 这些称为:列表a的元素。
列表中的元素可以各不相同,可以是任意类型。比如:a = [10,20,"abc",True,[]]
2.列表内存分布
2.1 创建列表
# 定义一个列表
a = [10,20,30,40]
# 打印列表a的地址以及其元素
print(id(a)) # 4376650528
print(id(a[0])) # 10--4527943632
print(id(a[1])) # 20--4527943952
print(id(a[2])) # 30--4527944272
print(id(a[3])) # 40--4527944592
2.2 列表添加元素
- 使用append()或者extend()函数添加元素。在列表尾部进行添加元素
当列表增加元素时,列表会自动进行内存管理,减少了程序员的负担。但是列表元素大量移动,效率低所以一般建议在尾部添加。
# 定义一个列表
a = [10,20,30,40]
# 使用a.append()
a.append(50)
# 或者使用a.extend([50])
# a.extend([50])
print(a) # [10,20,30,40,50]
print(id(a)) #4376650528
本地电脑运行结果:
列表是可变数据类型,地址不变,值可变。因此,添加新的值之后,地址也是不变的。
- 使用insert()函数指定任意位置插入元素
# 定义一个列表
a = [10,20,30,40]
# 使用insert()函数
a.insert(2,50)
print(a) # [10,20,50,30,40]
print(id(a)) # 4376650528
解析:在索引2处要引用50这个元素
- python内存内部会对列表申请8个空间空间。
- 在8个内存空间里,遍历索引2,引用50这个对象
- 后续索引3和索引4各后退一步
申请了8个内存空间但是list实际用来存储元素只使用了其中5个内存空间 insert的时间复杂度是O(n)
2.3 列表删除元素
- Pop()时间复杂度为O(1)
pop () 方法 删除并返回指定位置的元素,如果未指定位置则默认操作
# 定义一个列表
a = [10,20,30,40]
# 使用pop()函数 默认删除最后一个
a.pop()
pop () 方法 删除并返回指定位置的元素,如果未指定位置则默认操作
2.4 声明二维列表
# 定义一个列表
student = [ ["TOM",12],
["ANNE",11],
["Bob",8],
["Jon",9]
]
# 打印二维列表
print(student)
结果运行: