列表
一、列表基础
1、问题引入
- 需求:定义变量保存6个学生对成绩进行操作
- 方法1:定义六个变量 - 数据较多时操作麻烦,不好引用
- 方法2:使用列表操作多个成绩
scores = [55, 88, 62, 96, 33, 87]
print(sum(scores) / len(scores))
print(max(scores))
- 使用推荐:同时操作多个数据时,建议使用列表
- 注意:认识常见数据操作的系统函数如:sum()、max()、len()的含义与作用
2、认识列表
- list(列表)时容器型的数据类型(序列):将[]作为容器的标志,数据之间用逗号隔开:[数据1,数据2,…数据n];
- 列表作为容器的特点:
- 列表可变性:
- 容器中元素的数量,元素的值可以改变 - 支持增删改查;
- 列表有序性:
- 元素有顺序对应的位置信息,列表确定每个元素之间的的先后顺序就确定;
- 顺序影响结果,支持下标操作。
- 列表可变性:
# 列表是有序的
print([10, 20, 30] == [10, 30, 20]) # False
# 集合是无序的,顺序不影响结果
print({10, 20, 30} == {10, 30, 20}) # True
- 列表对元素的要求:没有要求,任何数据类型都可以作为列表元素。
- 一个列表中的元素可以是同一数据类型;
- 一个列表中的元素可以是不同数据类型;
- 一个列表中的元素还可以是列表。
- 注意:元素指容器中每个独立的数据。
list1=[10, 20, 30]
list2=['a','b','c']
list3=[10,'a',False]
list1=[10, 20, 30,[50,60]]
二、列表的查操作
1、查单个 - 获取列表中某个元素
-
语法:
列表[索引] - 获取列表中指定索引的元素
-
说明:
- 列表 - 需要获取元素的列表对象(可以是一个保存列表的变量,也可以是具体的列表);
- [] - 固定写法;
- 索引 - 下标:元素在列表中的位置信息
- 下标一旦确定,列表中每个元素对应的索引就确定了
-
注意:
- 列表一旦确定,列表中每个元素对应的索引就确定了;
- 下标不能越界
- 每个元素有两个下标:
- 从前往后下标下标从0开始;
- 从后往前从-1开始。
[10, 20, 30][2] # 第二个[]是指下标
list = [10, 20, 30]
print(list[2]) # 从前往后去
print(list[-1]) # 从后往前取
print([10, 20, 30][2])
#
# print(list[5]) # 报错 索引不能越界
2、切片 - 同时获取列表中多个元素
-
完整语法:
列表[开始下标:结束下标:步长]
- 说明:
- 列表 - 需要获取元素的列表
- [] - 固定写法
- 开始下标、结束下标、步长 - 必须是整数
- 开始下标 - 从哪开始取(可以取)
- 结束下标 - 取到哪结束(取不到)
- 步长 - 怎么取(一个一个按顺序取还是跳着取;从前往后还是从后往前取)
- 说明:
-
使用切片:
- 确定切片结果:
- 先确定结果是否为空,看开始下标对应的位置对应的位置到结束下标对应位置的方向和步长的方向是否一直,一致结果不为空,不一致结果一定为空列表;
- 如果结果不为空,再确定切片刀有效范围,开始下标对应元素可以取到,结束下标对应元素取不到;
- 再有效范围内按照步长的方向和绝对值获取元素。
- 确定切片结果:
# a.确定切片结果
movies = ['肖生克的救赎', '霸王别姬', '阿甘正传', '钢铁侠', '蜘蛛侠', '蝙蝠侠', '蚁人', '雷神', '复仇者联盟']
print(movies[1:-1:1]) # ['霸王别姬', '阿甘正传', '钢铁侠', '蜘蛛侠', '蝙蝠侠', '蚁人', '雷神']
print(movies[-1:1:-2]) # ['复仇者联盟','蚁人','蜘蛛侠', '阿甘正传']
print(movies[-2:5:2]) # [] 方向不一致
print(movies[0:-2:4]) # ['肖生克的救赎','蜘蛛侠']
print(movies[5:-1:2]) # ['蝙蝠侠','雷神',]
print(movies[6:-6:-1]) # ['蚁人','蝙蝠侠','蜘蛛侠']
- 怎么写切片代码获取指定元素
- 确定开始下标:结果中数据在列表的下标
- 确定结束下标:结束下标是结果中最后一项的后一个数据或者前一个下标(看方向)
- 确定步长:正负看趋势(从前往后还是从后往前),再看绝对值(一个一个取还是跳着取)
- 方向:步长为正,从开始下标到结束下标从前往后取;反之,从结束下标到开始下标从后往前取。
- 绝对值:绝对值为1,就1个1个取;绝对值为2,取1个跳1个再取1个…
# b.怎么写切片代码获取指定元素
print('b.怎么写切片代码获取指定元素')
# ['肖生克的救赎', '钢铁侠', '蚁人']
print(movies[0:-2:3])
# ['复仇者联盟', '雷神', '蚁人', '蝙蝠侠']
print(movies[-1:-5:-1])
# ['钢铁侠', '霸王别姬']
print(movies[3:0:-2])
# ['雷神', '蝙蝠侠', '钢铁侠']
print(movies[-2:2:-2])
# ['霸王别姬', 蝙蝠侠']
print(movies[1:-3:4])
3、切片的省略语法
-
省略步长:相当于默认步长为1
列表[开始下标:结束下标]
print(movies[1:4]) # ['霸王别姬', '阿甘正传', '钢铁侠']
print(movies[-1:1]) # []
-
省略开始下标:获取元素从0或者从-1开始,由步长正负决定
列表[:结束下标:步长]
movies = ['肖生克的救赎', '霸王别姬', '阿甘正传', '钢铁侠', '蜘蛛侠', '蝙蝠侠', '蚁人', '雷神', '复仇者联盟']
# b.省略开始下标
print(movies[:-2:2]) # [ '肖生克的救赎','阿甘正传', '蜘蛛侠''蚁人']
print(movies[:2:-2]) # ['复仇者联盟', '蚁人', '蜘蛛侠']
print(movies[:4]) # ['肖生克的救赎', '霸王别姬', '阿甘正传', '钢铁侠']
-
**省略结束下标:**获取元素从开始下标开始取到到0或者到-1取完为止结束(取得的最后一个),由步长正负决定
列表[开始下标::步长]
# c.省略结束下标
print('# c.省略结束下标')
print(movies[2::2]) # ['阿甘正传', '蜘蛛侠', '蚁人', '复仇者联盟']
print(movies[4::-1]) # ['蜘蛛侠','钢铁侠', '阿甘正传','霸王别姬','肖生克的救赎']
print(movies[3:]) # [ '钢铁侠', '蜘蛛侠', '蝙蝠侠', '蚁人', '雷神','复仇者联盟']
4、遍历 - 一个一个地获取列表中所有元素
-
方法1:直接获取
for 变量 in 列表:
循环体(变量依次获取到的就是列表中的每个元素)
for i in score:
print(i, end='、')
print()
# 求总分
sum = 0
for i in score:
sum += i
print(sum)
# 求90以上学生人数:
count = 0
for i in score:
if i > 90:
count += 1
print('90以上学生人数:',count)
-
方法2:通过获取所有元素下标来获取
for 变量 in range(len(列表))
循环体(列表[变量])
# 方法2:通过获取所有元素下标来获取
for i in range(len(score)):
print(i,score[i])
# 求总分
sum = 0
for i in range(len(score)):
sum+=score[i]
print('求总分',sum)
# 求90以上学生人数:
count = 0
for i in range(len(score)):
if score[i]>90:
count+=1
print('90以上学生人数:',count)
-
方法3:使用enumerate函数
for 变量1,变量2 in enumerate(列表):
循环体(变量1获取每个元素下标,变量2获取每个元素值)
for index,item in enumerate(列表): -
注意:len(列表) - 获取列表长度
# 方法3:
for i,j in enumerate(score):
print('i:',i,', j:',j)
# 求总分
sum = 0
for i,j in enumerate(score):
sum+=j
print('总分:',sum)
# 求90以上学生人数:
count = 0
for i,j in enumerate(score):
if j>90:
count+=1
print('求90以上学生人数:',count)