0%

Python 数据容器Sequence序列之List列表、Tuple元组

Sequence序列是一种有序的数据容器。这里介绍其中典型的两种类型:List列表、Tuple元组

abstract.png

List列表

创建列表

定义:使用方括号[]定义列表,用逗号分隔元素

1
2
3
4
5
6
7
8
9
people = []
print("people:", people)

# 使用list函数创建列表
animal = list()
print("animal:", animal)

phone_brand = ["XiaoMi", "oppo", "Apple"]
print("phone_brand:", phone_brand)

figure 1.png

还可以利用list()函数将可迭代对象转为List

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
phone_brand = ["XiaoMi", "oppo", "Apple"]
phone_brand2 = list(phone_brand)
phone_brand2.append("Vivo")
print("phone_brand:", phone_brand)
print("phone_brand2:", phone_brand2)

alphas = list("Aaron")
print("alphas :", alphas)

ages_tuple = (81,11,27,42)
ages_list = list(ages_tuple)
print("ages_list :", ages_list)

names_set = {"Tom","Aaron","Bob"}
names_list = list(names_set)
print("names_list :", names_list)

# 字典转换为列表时,只提取字典的Key
sex_dict = {"Tom":"man","Bob":"woman"}
sex_list = list(sex_dict)
print("sex_list :", sex_list)

range1 = range(5)
range_list = list(range1)
print("range_list :", range_list)

figure 2.png

列表基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
print("--------------- 列表基本操作 ---------------")
phone_brand = ["Oppo","XiaoMi", "oppo", "Apple"]
print("phone_brand:", phone_brand)

# 修改元素
phone_brand[1] = "HuaWei"
print("modify list phone_brand:", phone_brand)

# 添加元素
# append方法: 向列表尾部追加元素
phone_brand.append("vivo")
print("append vivo 2 phone_brand:", phone_brand)
prices = (12.99, 22.99)
# extend方法:将可迭代对象中的元素全部追加到列表中
phone_brand.extend( prices )
print("append tulple 2 phone_brand:", phone_brand)

# 插入元素
# instert方法: 向列表指定位置插入元素
phone_brand.insert(3, "vivo")
print("insert phone_brand:", phone_brand)

# 删除元素
# del语句: 删除列表指定位置元素
del phone_brand[-1]
print("delete element phone_brand:", phone_brand)
# 可以使用切片,意为删除索引为0、1的元素
del phone_brand[0:2]
print("delete element phone_brand:", phone_brand)

# pop方法: 从列表尾部删除一个元素,并返回它
brand1 = phone_brand.pop()
# pop方法: 从列表删除指定索引位置的元素,并返回它
brand2 = phone_brand.pop(0)
print("brand1:", brand1, "brand2:", brand2)
print("after pop phone_brand:", phone_brand)
# remove方法:删除列表中第一个匹配的元素
phone_brand.remove("vivo")
print("remove first vivo phone_brand:", phone_brand)

# 清空列表
# clear方法: 清空列表
phone_brand.clear()
print("After claer phone_brand:", phone_brand)

figure 3.png

对列表切片进行赋值

对列表切片进行赋值。可以实现替换或修改列表中某范围的元素。赋值的右侧可以是一个列表或可迭代对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
print("--------------- 对列表进行切片赋值 ---------------")
# 替换切片范围的元素
age = [11,22,33,44]
print("age 1:", age)
age[1:3] = [6,7]
print("age 2:", age)

# 还可将切片替换为长度与其不同的序列
age = [11,22,33,44]
print("age 3:", age)
age[1:3] = (1,2,3,4,5,6,7,8,9)
print("age 4:", age)

# 插入元素到切片范围
age = [11,22,33,44]
print("age 5:", age)
# 替换空切片,相当于插入一个序列
age[2:2] = (996, 997, 998)
print("age 6:", age)

# 删除切片范围的元素
age = [11,22,33,44]
print("age 7:", age)
# 使用空序列替换,相当于删除该切片范围的元素
age[1:3] = []
print("age 8:", age)

figure 4.png

列表排序

列表的sort方法是原地排序,即修改对原List进行排序;而sorted函数则是返回一个排序后的新列表,并不会修改原列表。二者都支持key、reverse参数。前者用于指定对元素进行排序的排序函数;后者用于设置是否进行降序排序。默认为False,即升序排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

print("--------------- 列表排序 ---------------")
pc_brand = ["mac", "dell", "asus", "hp"]
print("pc_brand:", pc_brand)
# sort方法: 对列表进行升序排序,原地排序
pc_brand.sort()
print("pc_brand asc sort:", pc_brand)

pc_brand = ["mac", "dell", "asus", "hp"]
print("pc_brand:", pc_brand)
# sort方法: 对列表进行降序排序, 原地排序
pc_brand.sort(reverse=True)
print("pc_brand desc sort:", pc_brand)

pc_brand = ["mac", "dell", "asus", "hp"]
print("pc_brand:", pc_brand)
# sort方法: 对列表的元素按指定排序函数(这里是元素的长度)升序排序, 原地排序
pc_brand.sort(key=len)
print("pc_brand asc sort by len:", pc_brand)

car_brand = ["bmw", "audiBigCar", "toyota"]
# sorted函数: 对列表进行升序排序
asc_car_brand = sorted(car_brand)
# sorted函数: 对列表进行降序排序
desc_car_brand = sorted(car_brand, reverse=True)
# sorted函数: 对列表按指定排序函数(这里是元素的长度)升序排序
car_brand_by_len = sorted(car_brand, key=len)
print("car_brand:", car_brand)
print("car_brand asc sort:", asc_car_brand)
print("car_brand desc sort:", desc_car_brand)
print("car_brand asc sort by len:", car_brand_by_len)

figure 5.png

列表其他方法

列表其他的常见方法如下

1
2
3
4
5
6
7
8
9
10
11
12
print("--------------- 列表其他方法 ---------------")

# count方法:统计指定元素的次数
list1 = ["Aaron","Bob","Aaron"]
print("list1:", list1)
print("list1 count Aaron :", list1.count("Aaron"))

# reverse方法:翻转列表
list1 = [69, 11,24]
print("list1:", list1)
list1.reverse()
print("after reverse list1:", list1)

figure 6.png

数值列表统计计算

对于数值列表可以进行统计计算

1
2
3
4
5
6
7
print("--------------- 数值列表统计计算 ---------------")
# 对数值列表执行统计计算
nums1 = [50, 20, 30]
nums1_min = min(nums1)
nums1_max = max(nums1)
nums1_sum = sum(nums1)
print("nums1 list, min:",nums1_min, "max:",nums1_max, "sum:", nums1_sum)

figure 7.png

Tuple元组

创建元组

使用圆括号()定义元组,用逗号分隔元素

1
2
3
4
5
6
7
8
9
10
# 使用圆括号()定义元组,用逗号分隔元素
photo_width_height = (1366, 768)
print("photo_width_height:", photo_width_height)

photos = ()
print("photos:", photos)

# 使用tuple函数创建元组
ages = tuple()
print("ages:", ages)

figure 8.png

特别地, 如果元组中只包含一个元素,需要在元素后面添加,逗号。如下述代码,否则无法与普通数字进行区分

1
2
photo_size = (1024,)
print("photo_size:", photo_size)

figure 9.png

事实上元组其实是由于,逗号进行标识的。添加圆括号只是为了代码更清晰

1
2
3
4
5
names = "Aaron",
print( "names: ", names)

ages = 135,996,235,2
print( "ages: ", ages)

figure 10.png

可通过tuple()函数将可迭代对象转为Tuple

1
2
3
4
5
6
7
8
9
10
11
# tuple(): 还可以将可迭代对象转为Tuple
nums = tuple([22,33,44])
print("nums:", nums)

names = tuple("AaronZhu")
print("names:", names)

# 字典转换为元组时,只会提取字典的Key
sex_dict = {"Tom":"man","Bob":"woman"}
sex_tuple = tuple(sex_dict)
print("sex_tuple :", sex_tuple)

figure 11.png

元组基本操作

元组其实和列表非常类似。最大的不同点在于:元组是不可变的。一旦创建后,其中的元素不可修改。包括修改元素、删除元素、添加元素操作都是不允许的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
print("--------------- 元组基本操作 ---------------")
photo_size = (1366,768)
print("photo size #1:", photo_size)

try:
# 元组tuple创建后,其中的元素内容不可以改变。包括:修改元素、删除元素、添加元素
# 故,修改tuple中元素的值会抛异常
photo_size[0] = 12345678
except Exception as e:
print("Happen Excpetion:", e)

print("photo size #2:", photo_size)

# 元组中的元素虽然不可以修改,但可以重新对元组变量进行赋值
photo_size = (1024,20)
print("photo size #3:", photo_size)

# 元组中的元素虽然不可以删除,但可以通过del语句删除整个元组
del photo_size

figure 12.png

参考文献

  1. Python编程·第3版:从入门到实践 Eric Matthes著
  2. Python基础教程·第3版 Magnus Lie Hetland著
  3. 流畅的Python·第1版 Luciano Ramalho著
请我喝杯咖啡捏~

欢迎关注我的微信公众号:青灯抽丝