day5 - 列表的相关知识
今日继续学习列表的相关知识,主要内容包括列表切片、列表主要的方法
1、列表
1)什么是列表
容器型的数据类型(序列),用[]作为容器标志,元素间用逗号隔开:[元素1, 元素2, 元素3, ...]
语法:列表中的元素从0
开始,0表示第一个元素,1表示第二个元素,...
,以此类推
可以从-1开始:-1表示倒数第一个,-2表示倒数第二个, ...
列表中的元素:可以是任何类型的数据,
元素的值和元素的个数都是可变的
列表中的元素是有顺序的
2)列表的基本操作 - 增删查改
示范用例:movies = ['八佰', '花木兰', '信条', '星际穿越', '盗梦空间', '肖申克的救赎']
a.查 - 获取列表里的元素:
- 单个查询 - 列表[下标]:
movies[2] # 信条
- 遍历
- 遍历整个列表
movies = ['八佰', '花木兰', '信条', '星际穿越', '盗梦空间', '肖申克的救赎']
for x in movies:
print(x, end=' ') # 八佰 花木兰 信条 星际穿越 盗梦空间 肖申克的救赎
- 遍历列表的下标来获取元素
这种方式获取元素更灵活,可以只选取列表里需要的元素,而不必去遍历整个列表
for i in range(5):
print(movies[i], end=' ') # 八佰 花木兰 信条 星际穿越 盗梦空间 肖申克的救赎
for i in range(1, 5, 2):
print(movies[i], end=' ') # 花木兰 星际穿越
- 遍历同时获取元素的下标和元素 - 使用
enumetate()
函数:
语法:enumerate(sequence, [start=0])
- sequence:可遍历数据对象 start:下标起始位置
作用:将可遍历的数据对象(列表、元组或字符串)组合成一个索引序列,同时列出数据下标和数据
for i, j in enumerate(movies):
print(i, j, end=',') # 0 八佰,1 花木兰,2 信条,3 星际穿越,4 盗梦空间,5 肖申克的救赎,
for i, j in enumerate(movies, 3):
print(i, j, end=',') # 3 八佰,4 花木兰,5 信条,6 星际穿越,7 盗梦空间,8 肖申克的救赎,
b.增 - 增加元素
- 列表.append(元素) - 在列表的末尾新增元素
movies.append('夺冠')
for x in movies:
print(x, end=' ') # 八佰 花木兰 信条 星际穿越 盗梦空间 肖申克的救赎 夺冠
- 列表.insert(下标, 元素) - 在指定下标的前面插入元素
movies.insert(2, '禁闭岛')
for x in movies:
print(x, end=' ') # 八佰 花木兰 禁闭岛 信条 星际穿越 盗梦空间 肖申克的救赎 夺冠
c.删 - 删除元素
- del 列表[下标] - 删除指定下标位置的元素
del movies[1]
for x in movies:
print(x, end=' ') # 八佰 禁闭岛 信条 星际穿越 盗梦空间 肖申克的救赎 夺冠
- 列表.remove(元素) - 定位第一个符合要求的元素并删除(也就是有多个重复值时删除最前的那个)
movies.remove('星际穿越')
for x in movies:
print(x, end=' ') # 八佰 禁闭岛 信条 盗梦空间 肖申克的救赎 夺冠
- 列表.pop() - 取出列表末尾的元素
列表.pop(下标) - 取出列表中下标对应的元素
movies.pop()
for x in movies:
print(x, end=' ') # 八佰 禁闭岛 信条 盗梦空间 肖申克的救赎
movies.pop(2)
for x in movies:
print(x, end=' ') # 八佰 禁闭岛 盗梦空间 肖申克的救赎
注意:3个删除之间的相同的和不同点
相同点:
都能达到删除列表中对应元素的目的,都不能删除列表中不存在的元素或者不存在的下标对应的元素
不同点:
del/remove都是直接从内存空间删除掉元素,而pop是将元素取出,并没有直接删除,如果将取出的元素赋值给变量,还可以接着使用该值(若没有用变量来保存,该变量也会自然消亡,不会占用内存)
d.改 - 修改元素
- 列表[下标] - 修改指定下标对应的元素
movies[3] = '泰坦尼克号'
for x in movies:
print(x, end=' ') # 八佰 禁闭岛 盗梦空间 泰坦尼克号
3)列表相关操作 - 运算
1)加法运算
列表1 + 列表2
- 将几个相加的列表的元素首尾相接合在一起,合并产生一个新的序列,顺序和加的顺序一致
list1 = [1, 2, 3, 4]
list2 = [23, 45, 53]
print(list1+list2) # [1, 2, 3, 4, 23, 45, 53]
print(list2+list1) # [23, 45, 53, 1, 2, 3, 4]
2)乘法运算
列表 * N / N * 列表
- 将列表重复N次,然后结合形成一个新的列表
list1 = [1, 2, 3, 4]
list2 = [23, 45, 53]
print(2*list1) # [1, 2, 3, 4, 1, 2, 3, 4]
print(list1*3) # [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
3)比较运算
比较大小 / 比较相等
* 比较大小(>、<、>=、<=) - 取列表中第一对不相等的元素,大的元素对应的列表大(进行对比的元素需要是同类型的数据(文本、数字))
list1 = [23, 50, 3, 4, 1]
list2 = [23, 45, 53]
print(list1 > list2) # True
list1 = [1, 50, 3, 4, 1]
list2 = [23, 45, 53]
print(list1 > list2) # False
- 比较相等 - 列表元素的类型、大小、个数、顺序需要完全一样
list1 = [1, 2, 3, 4]
list2 = [1, 2, 3, 4]
list3 = [1, 2, '3', 4]
print(list1 == list2, list2 == list3) # True False
4)in / not in
1、in - 判断元素是否在列表里(类型和大小)
2、not in - 判断元素是否不在列表里
list1 = [1, 2, 3, [5, 6]]
print(1 in list1, [1] in list1, 5 in list1, [5, 6] in list1, ) # True False False True
5)函数
# 函数和方法所用的示例列表
scores = [98, 62, 54, 49,68, 89, 75, 32]
函数 | 作用 | 示例 |
sum(列表) | 计算列表中所有元素的和 | scores = [98, 62, 54, 49,68, 89, 75, 32] sum(scores) # 527 |
max(列表) | 求出列表中的最大值 | max(scores) # 98 |
min(列表) | 求出列表中的最小值 | min(scores) # 49 |
len(列表) | 计算列表的长度(元素的个数) | len(scores) # 8 |
list(序列) | 将其他序列转换成列表(转换的内容必须是序列) | list(‘abc’) # [‘a’, ‘b’, ‘c’] |
sorted(列表, reverse=True/False) | 对列表排序(False - 升序 True - 降序, 默认是False) 创建新的列表,不修改原表 | sorted(scores) # [32, 49, 54, 62, 68, 75, 89, 98] print(sorted(scores, reverse=True)) # [98, 89, 75, 68, 62, 54, 49, 32] |
2、切片
1)语法:
切片 - 获取列表中的部分元素(一次性获取多个元素)
列表[开始下标:结束下标:步长] - 从开始下标开始取元素到结束下标为止,每次下标增加步长(默认是1)获取下一个元素
注意:
1)切片的结果是一定是列表
2)结束下标一定取不到,取不到元素就是空列表
2)步长的正负决定取数的方向:
步长为正 - 从前往后取,结束下标一定在开始下标的后面,否则结果为空
步长为负 - 从后往前取,结束下标一定在开始下标的前面,否则结果为空
list1 = [98, 45, 34, 89, 23, 67, 23, 9, 54, 100, 78]
print(list1[1:5:1]) # [45, 34, 89, 23]
print(list1[2:9:2]) # [34, 23, 23, 54]
print(list1[3:3:1]) # []
print(list1[1:4:-1]) # []
print(list1[1:-1:-1]) # []
print(list1[-2:1:-2]) # [100, 9, 67, 89]
2)切片相关操作
fruits = ['苹果', '香蕉', '猕猴桃', '橘子', '石榴', '葡萄']
切片 | 示例 |
列表[开始下标:结束下标] - 省略步长 | fruits = [‘苹果’, ‘香蕉’, ‘猕猴桃’, ‘橘子’, ‘石榴’, ‘葡萄’] print(fruits[1:4]) # [‘香蕉’, ‘猕猴桃’, ‘橘子’] print(fruits[-3:-1]) # [‘猕猴桃’, ‘橘子’] print(fruits[-1:2]) # [] |
列表[:结束下标:步长] - 省略开始下标 根据步长的正负决定取数的方向和开始下标是0开始-1 | print(fruits[:4]) # [‘苹果’, ‘香蕉’, ‘猕猴桃’, ‘橘子’] print(fruits[:3:-2]) # print(fruits[-1:3:-2]) -> [‘葡萄’] print(fruits[:2:-1]) # [‘葡萄’, ‘石榴’, ‘橘子’] print(fruits[:3:2]) # [‘苹果’, ‘猕猴桃’] |
列表[开始下标::步长] - 省略结束下标 | fruits = [‘苹果’, ‘香蕉’, ‘猕猴桃’, ‘橘子’, ‘石榴’, ‘葡萄’] print(fruits[2:]) # [‘猕猴桃’, ‘橘子’, ‘石榴’, ‘葡萄’] print(fruits[-3::-1]) # [‘橘子’, ‘猕猴桃’, ‘香蕉’, ‘苹果’] print(fruits[3::-2]) # [‘橘子’, ‘香蕉’] |
列表[::-1] - 省略开始下标和结束下标 - 将列表倒置 产生新的列表 | print(fruits[::-1]) # [‘葡萄’, ‘石榴’, ‘橘子’, ‘猕猴桃’, ‘香蕉’, ‘苹果’] |
3、列表的方法
# 函数和方法所用的示例列表
scores = [98, 62, 54, 49,68, 89, 75, 32]
方法 | 作用 | 示例(操作+操作后列表内容) |
列表.append(元素) | 在列表末尾添加指定元素 | scores = [98, 62, 54, 49,68, 89, 75, 32] scores.append(98) # [98, 62, 54, 49, 68, 89, 75, 32, 98] |
列表.insert(下标, 元素) | 在添加元素到指定下标对应的位置 | scores.insert(3, 56) # [98, 62, 54, 56, 49, 68, 89, 75, 32, 98] |
列表.extend(序列) | 在列表末尾扩展序列,可以同时添加多个元素(这个元素是一个序列) | scores.extend([28, 56, 87]) # [98, 62, 54, 56, 49, 68, 89, 75, 32, 98, 28, 56, 87] |
列表.remove(元素) | 删除指定元素 - 直接从内存中删除 | scores.remove(max(scores)) # [62, 54, 56, 49, 68, 89, 75, 32, 98, 28, 56, 87] |
列表.pop(元素) | 去除指定元素 - 只是去除,并未直接删除 | scores.pop(28) # [62, 54, 56, 49, 68, 89, 75, 32, 98, 56, 87] |
列表.sort(reverse=True/False) | 排序 - 直接在原表上操作,修改原表 | scores.sort() # [32, 49, 54, 56, 56, 62, 68, 75, 87, 89, 98] |
列表.reverse() | 将列表倒置 - 直接修改原表,而列表[::-1]不修改原表,产生新的列表 | scores.reverse() # [98, 89, 87, 75, 68, 62, 56, 56, 54, 49, 32] |
列表.count(元素) | 统计元素在对应列表中出现的次数 | print(scores.count(56)) # 2 |
列表.index(元素) | 查看元素在列表中对应的索引位置 | print(scores.index(75)) # 3 |
列表.clear() | 清除列表中全部内容,直接从内存删除 | print(scores.clear()) # None |