摘要
Python中最常用的数据结构之一是列表,它具有强大的功能和易于使用的创建方法。列表可以完成大多数集合类的数据结构实现,包括数字、字符串和可迭代对象。列表的创建方法包括创建一个列表并赋初值,使用表达式创建,也可以将其他数据转换为列表。列表的运算符包括加号和乘号,用于组合列表,而星号用于重复列表。列表是Python中最常用的数据类型之一,可以完成大多数集合类的数据结构实现。
1、列表的作用
同时处理多个数据时使用
scores = [12,3,6,5,5,4,7,8,5]
print(sum(scores)/len(scores))
print(max(scores))
2、什么是列表
- 列表是容器型数据类型(可以同时保存多个数据)
- 将[]作为容器的标志,里面多个数据(元素)用逗号隔开
- 列表是可变的(可变指的是元素的个数和值可变 →列表增删改);列表是有序的(顺序影响结果;支持下标)
- 列表的元素:任何类型的数据都可以作为列表的元素
3、列表查操作
3.1 查单个
获取列表中一个元素
-
语法:列表[下标]
-
说明
列表:可以是具体的列表值也可以是保存列表的变量
【】:固定写法
下标:又叫索引,是元素在列表中的位置信息,列表一旦确定,列表中的每个元素都会对应两个固定下标,表示元素在列表中的位置。下标的确定方式:a.从前往后从0开始不断加1 b.从后往前从-1开始不断减1
names = ['孙膑','纳尔','加里奥','武器大师','剑魔','GGbond','宁红叶'] print(names[1]) print(names[-2])
3.2 切片
一次获取列表中的多个元素(获取部分元素)
-
完整语法:列表[开始下标:结束下标:步长]
-
怎么确定切片的结果
第一步:看切片结果是否为空(看开始下标到结束下标的方向和步长是否一致,如果不一致结果肯定为空列表)
第二步:确定有效范围(开始下标对应的元素能取到。结束下标对应的元素取不到
第三步:在有效范围内按步长来获取元素
步长正负:步长为正在有效范围内从前往后取;步长为负在有效范围内从后往前取
步长的绝对值:绝对值为1,就一个一个的取,绝对值为2,取一个再跳过一个再取一个。。
-
切片代码怎么写
确定开始下标的值:需要获取的结果中的第一个元素对应的下标
确定结束下标的值:需要获取的结果的最后一个元素的后面那个元素或者前面那个元素的下标(看获取方向)
确定步长:确定方向(从前往后取步长为正,否则为负)和绝对值(一个一个的取绝对值为一,取一个跳过一个)
movies = ['逐梦演艺圈', '上海堡垒', '鲨卷风', '无名之辈', '十面埋伏', '蜘蛛侠-纵横宇宙', '消失的他'] print(movies[0:7:1]) print(movies[0:7: 2]) print(movies[0:7:3]) print(movies[0:7:4]) print(movies[0:7:5])
-
-
省略语法
- 省略步长 - -步长就是1:列表[开始下标:结束下标]
print(movies[1:-1]) print(movies[-1:1])
- 省略开始下标 - - 从头开始取: 列表[:结束下标:步长](步长的正负第一个元素是头还是尾)
print(movies[:3:-2]) print(movies[:3:1])
- 省略结束下标 - -有效范围是从开始下标一直到最后一个元素或者到第一个元素(由步长决定正负):列表[开始下标::步长]
print(movies[2::2]) #['鲨卷风', '十面埋伏', '消失的他'] print(movies[3::-1]) #['无名之辈', '鲨卷风', '上海堡垒', '逐梦演艺圈'] print(movies[-3:]) #['十面埋伏', '蜘蛛侠-纵横宇宙', '消失的他'] print(movies[::-2]) #['消失的他', '十面埋伏', '鲨卷风', '逐梦演艺圈']
3.3 遍历
- 方法1,直接获取元素
'''
for 变量 in 列表:
循环体(变量依次取到的就是列表中的每个元素)
'''
tvs=['亮剑','甄嬛传','苍兰决','爱情公寓','知否','三国演义','武林外传','康熙王朝','如懿传']
for x in tvs:
print(x)
- 方法2,先获取每个元素的下标值,然后再根据下标获取元素
for index in range(len(tvs)):
print(index,tvs[index],end='')
print()
for index in range(-1,-len(tvs)-1,-1):
print(index,tvs[index],end='')
print()
for index in range(len(tvs)-1,-1,-1):
print(index,tvs[index],end='')
- 方法3,同时获取每个元素和每个元素对应的下标
'''
for 变量1 ,变量2 in enumerate(列表):
循环体(变量1依次取到的是每个元素的下标,变量2依次取到的时候每个元素
'''
for index, item in enumerate(tvs): #index:下标 item:元素
print(index, item)
4、增删改操作
4.1 增
- 列表.append(元素) 在指定列表的最后添加指定的元素
games = ['王者荣耀','英雄联盟','永劫无间','金铲铲之战']
print(games)
games.append('开心消消乐')
print(games)
# 案例1:提取scores中所有不低于80分的成绩
scores = [89, 78, 99, 34, 67, 77, 80, 82, 85, 90, 55]
scores2 = []
# [89, 99, 80, 82, 85, 90]
for i in scores:
if i >= 80:
scores2.append(i)
print(scores2)
# 案例2:将scores中所有低于60分的成绩变成'补考'
scores = [89, 78, 99, 34, 67, 77, 80, 82, 85, 90, 55]
# [89, 78, 99, '补考', 67, 77, 80, 82, 85, 90, '补考']
resul_scores = []
for i in scores:
if i < 60:
resul_scores.append('补考')
# print(resul_scores)
else:
resul_scores.append(i)
print(resul_scores)
- 列表.inser(下标,元素) 将指定元素插入到指定下标对应的元素前
games = ['王者荣耀', '英雄联盟', '和平精英', '原神']
print(games)
games.insert(0,'永劫无间')
print(games)
4.2 删
遍历删除一定要注意删不干净的问题,可以删之前对原数据通过拷贝的方式进行备份,遍历备份数据删除原数据,倒着删也不会影响前面数据位置
- del 列表【下标】 删除列表中指定下标对应的元素
tvs = ['亮剑', '甄嬛传', '如懿传', '爱情公寓', '知否', '康熙王朝', '三国演义', '流星花园', '武林外传']
print(tvs)
del tvs[3]
print(tvs)
- 列表.remove(元素) 删除列表指定元素,如果元素不存在会报错,如果有多个元素只删最前面的哪一个
tvs.remove('亮剑')
print(tvs)
- 列表.pop() 取出列表最后一个元素并且返回
resul = tvs.pop()
print(tvs)
print(resul)
- 列表.pop(下标) 取出列表中指定下标对应的元素并且返回
resul = tvs.pop(1)
print(tvs)
print(resul)
4.3 改
- 列表[下标] = 数据 -将列表中指定下标对应的数据改成指定数据
tvs[0] = '苍兰决'
print(tvs)
5、列表的相关操作
5.1 列表的加法乘法运算
- 列表1 + 列表2 将两个列表合并成一个新的列表
list1 = [1,2,3]
list2 = [4,5]
result = list1 + list2
print(result)
- 列表 * N 将列表中的元素重复N次产生新的列表
print(list1*3)
5.2 列表比较运算法
- 比较是否相等
print(list1 == [1,2,3])
print(list1 == [1,2,4])
-
比较大小
两个列表比较大小,比较第一对不相等元素的大小
print([2,2,3]>[2,1,4])
print([1,2,3]>[2,3,4,5])
-
in 和 not in
判断列表中是否存在指定数据存在的元素:数据 in 列表;
判断列表中是否不存在指定数据对应的元素:数据 not in 列表
list1 = [1,2,3] print(1 in list1) print(0 not in list1) print([1,2] in list1) print([1,4] in list1) print([1,4] not in list1)
5.3 列表相关函数
-
max\min 求最大值、最小值
''' max(序列) min(序列) ''' nums = [19,15,12,50,66,80,1,3,5] print(max(nums)) print(min(nums))
-
sum 求序列中所有元素的和
print(sum(nums))
-
sorted 排序
''' sorted(序列) -创建一个新列表,新列表中的元素是原序列中的元素从小到大的排序结果 ''' result = sorted(nums) print(result) ''' sorted(序列,reverse = True) -从大到小排序 ''' result = sorted(nums,reverse=True) print(result)
-
reversed(序列) 将序列中的元素倒序产生一个新的序列
result = reversed(nums) print(list(result))
-
len(序列) 获取序列中元素的个数
-
list(序列) 所有的序列都可以转换成列表,转换的时候会将原序列中的元素作为列表的元素
result = list('abc') print(result) result = list(range(5)) print(result)
5.4 列表相关方法
列表.xxx()
- 列表.clear() -清空列表
list = [1,2,3]
list.clear()
print(list)
- 列表.count(数据) -统计列表中指定数据的个数
scores = [99,21,55,65,78,2,3]
print(scores.count(99))
- 列表.extend(序列) -将序列中所有元素添加到列表的最后
list1 = [10, 20, 30]
list1.extend([100,200,300])
print(list1)
list1.extend('123')
print(list1)
- 列表.index() -获取列表中指定元素在指定列表中第一次出现的位置(返回从0开始的下标值)
scores = [99,21,55,65,78,2,3,55]
print(scores.index(55))
- 列表.reverse() -将列表倒序
scores.reverse()
print(scores)
- sort() -小到大、列表.sort(reverse=True) -大到小 都是直接修改原列表,不会产生新的列表,而且只能作用于列表
scores.sort()
print(scores)
scores.sort(reverse=True)
print(scores)
-
列表.copy() -复制列表产生一个一模一样新的列表
列表[:]、列表*1、列表+[]都可以实现copy的功能
list1 = [1,2,3,4]
list2 =list1.copy()
print(list1)
print(list2)
6、列表推导式
一种快速创建列表 表达式
6.1 推导式结构
- 结构1
'''
语法:[表达式 for 变量 in 序列]
原理:让变量去序列中取值,一个一个的取,取完为止,每取一个值就计算一次表达式
的结果,并且将结果作为列表中的一个元素
'''
result = [10 for x in range(5)]
print(result)
result = [x*2 for x in range(5)]
print(result)
# 练习3:通过列表推导式将列表中所有的偶数都除以2,奇数都乘以2
nums = [80, 11, 42, 30, 31, 55]
# [40, 22, 21, 15, 62, 110]
data = [i//2 if i%2 ==0 else i*2 for i in nums]
print(data)
- 结构2
'''
语法:[表达式 for 变量 in 序列 if 条件语句]
原理:先让变量去序列中取值,一个一个的取,每取一个值就判断一次条件是否成立
如果成立就计算表达式的结果作为列表的一个元素
'''
result = [x for x in range(10) if x % 2] #奇数时结果是1,为True,所以成立
print(result)