Python 学习笔记:列表和元组
列表和元组
1. 列表(list)
1.1 列表的定义
列表是一个有序集合,可以保存任意数量的 python 对象。
也可以理解为列表中存的是指针,体现在:
a = [0, 0]
x = [a] * 4 # x 中保存的是四个列表 a 的指针
print(x)
# [[0, 0], [0, 0], [0, 0], [0, 0]]
a[0] = 1
print(x)
# [[1, 0], [1, 0], [1, 0], [1, 0]]
1.2 列表的创建
1.2.1 直接创建列表
array = [1, 2, 3, 4, 5]
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
1.2.2 用 range 创建列表(类似于 matlab 的向量)
vec1 = list(range(10))
print(vec1)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
vec2 = list(range(1, 10, 2))
print(vec2)
# [1, 3, 5, 7, 9]
vec3 = list(range(10, 1, -2))
print(vec3)
# [10, 8, 6, 4, 2]
注意后两种写法中取值是左闭右开区间。
1.2.3 利用推导式创建列表
x = [0] * 5
print(x)
# [0, 0, 0, 0, 0]
x = [i for i in range(10)]
print(x)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
x = [i ** 2 for i in range(1, 10)]
print(x)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]
x = [i for i in range(50) if i % 2 == 0 and i % 3 == 0]
print(x)
# [0, 6, 12, 18, 24, 30, 36, 42, 48]
x = [[0 for i in range(2)] for j in range(3)]
print(x) # [[0, 0], [0, 0], [0, 0]]
# 开高维数组请用此法
1.2.4 创建一个混合列表
mix = [1, 'zhang', 3.14, [1, 2, 3]]
print(mix)
# [1, 'zhang', 3.14, [1, 2, 3]]
1.2.5 创建一个空列表
empty = []
print(empty)
# []
empty = list()
print(empty)
# []
1.3 向列表中添加元素
1.3.1 append()方法
简单的元素添加:
array = [1, 2, 3, 4, 5]
array.append(0)
print(array)
# [1, 2, 3, 4, 5, 0]
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
days.append(['Saturday', 'Sunday'])
print(days)
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', ['Saturday', 'Sunday']]
# ['Saturday', 'Sunday'] 被当做一个元素
1.3.2 extend() 方法
列表的连接:
array = [1, 2, 3, 4, 5]
array.extend([0]) # 参数必须也是一个列表
print(array)
# [1, 2, 3, 4, 5, 0]
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
days.extend(['Saturday', 'Sunday'])
print(days)
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
1.4 从列表中删除元素
1.4.1 remove() 方法
查找并删除第一个元素:
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
days.remove("Wednesday")
print(days)
# ['Monday', 'Tuesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
1.4.2 pop() 方法
参数是索引,缺省为 -1,返回删除的元素:
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
print(days.pop(0))
# Monday
print(days)
# ['Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
1.4.3 del 关键字
适用于“对象”列表,不适用于简单的数组:
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
del days[0: 2]
print(days)
# ['Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
1.5 获取列表中的元素
1.5.1 列表的索引
a = list(range(0, 100, 10))
print(a)
# [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
print(a[2])
# 20
print(a[-2])
# 80
1.5.2 列表的切片
形式:start: stop: step
a = list(range(1, 10))
b = a[1: 5: 2]
print(a) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(b) # [2, 4]
1.5.3 浅拷贝与深拷贝
a = [5, 4, 3, 2, 1]
b = a # 直接赋值(另外起了个名字)
c = a[:] # 浅拷贝(真的是在复制元素)
print(b is a) # True
print(c is a) # False
print(c == a) # True
a.sort()
print(b) # [1, 2, 3, 4, 5]
print(c) # [5, 4, 3, 2, 1]
a = [[1, 2], [3, 4]]
b = a
c = a[:]
print(b is a) # True
print(c is a) # False
a[0][0] = 0
print(b) # [[0, 2], [3, 4]]
print(c) # [[0, 2], [3, 4]]
1.6 列表的操作符
1.6.1 == 和 is
==逐个元素比较is对每个元素比较
1.6.2 + 和 *
+列表拼接并返回新列表(作用同extend(),但是浪费了内存)*列表的自我复制加长
1.6.3 in 和 not in
判断成员是否在列表内。
1.7 列表的其他方法
1.7.1 count(key)
统计 key 出现的个数
1.7.2 index(value, start=0, end=-1)
返回第一个 value 的索引
1.7.3 sort(key=None, reverse=False)
- key:指定排序的关键字
- reverse:是否降序
a = [(1, 2), (2, 3), (1, 3), (2, 1)]
a.sort(key=lambda b: b[1])
print(a)
# [(2, 1), (1, 2), (2, 3), (1, 3)]
2. 元组(tuple)
2.1 元组的创建
t = (1, 2, 3)
print(t, type(t)) # (1, 2, 3) <class 'tuple'>
t = 1, 2, 3 # 也可以不加括号
print(t, type(t)) # (1, 2, 3) <class 'tuple'>
t = (1,) # 单元素元组要加一个逗号
t = () # 空元组
2.2 元组的操作
元组不可更改,方法只有 count() 和 index()
想要更改元组可以通过赋值的方式来更新
2.3 元组的解压(实际上列表也有同样的操作)
t = (1, 2, 3)
a, b, c = t
print(a, b, c) # 1 2 3
t = (1, 2, 3, 4)
a, *b, c = t # 利用通配符将多余元素丢给 b
print(a, b, c) # 1 [2, 3] 4
t = (1, 2, 3, 4)
a, *_, c = t # 利用通配符丢弃多余元素
print(a, c) # 1 4

浙公网安备 33010602011771号