Day06
一、 列表
1. 列表的作用:
定义变量保存10个学生的分数
方法1:(没有列表时)
score1 = 98
score2 = 90
score3 = 78
score4 = 67
score5 = 66
score6 = 70
score7 = 55
score8 = 99
score9 = 34
score10 = 82
求平均数
print((score1 + score2 + ... + score10) / 10)
求最高分
max_score = score1
if score2 > max_score:max_score = score2
if score3 > max_score:max_score = score3
...
if score10 > max_score:max_score = score10
print(max_score)
方法2:(利用列表)
scores = [98, 90, 78, 67, 66, 70, 55, 99, 34, 82]
平均分
print(sum(scores)/len(scores))
最高分
print(max(scores))
2、什么是列表(list)
- 系统类型,是容器型数据类型(同时保存多个数据); 将[]作为容器的标志,里面多个元素(容器中每个独立的数据)用逗号隔开:[数据1,数据2,数据3 ,…]
2)列表是可变的(元素的个数和元素的值可变 - 支持增删改操作);列表是有序(支持索引操作、顺序影响结果)
3)列表的元素:任何类型的数据都可以作为列表的元素
1)列表有序
列表有序,所以顺序影响结果
print([10, 20, 30] == [20, 10, 30]) # False
集合无序,所以顺序不影响结果
print({10, 20, 30} == {20, 10, 30}) # True
2) 列表的元素
list1 = [10, 1.23, True, None, 'abc', [1,2]]
print(list1)
3)空列表
list2 = []
print(list2)
二、获取元素
1.查单个 - 一次获取列表中的一个元素
1)语法:列表[索引] - 获取列表中指定索引对应的元素
2)说明:
a.列表 - 具体的一个列表或者保存列表的变量
b.[] - 固定写法
c.索引 - 又叫下标;索引指的是元素在有序序列中的位置信息
列表一旦确定了,那么列表中每个元素的索引就确定了。
索引的确定方式:从前往后索引值从0开始不断加1;从后往前从-1开始不断减1
(每个元素都有两个索引值)
nums = [90, 89, 77, 99, 50]
print(nums[2])
print(nums[-3])
# print([90, 89, 77, 99, 50][2])
scores = [89, 78, 66, 90, 55, 70]
# 获取scores中66
print(scores[2])
print(scores[-4])
注意:索引不能越界
IndexError: list index out of range
练习:已知scores中保存的是一个班级所有学生的分数(分数已经按照从大小排好序)
scores = [99, 97, 95, 88, 80, 79, 73, 66, 62, 57, 40]
# 问题1:打印最高分
print(scores[0])
# 问题2:打印最低分
print(scores[-1])
# 问题3:打印中位数(如果scores中分数的个数是偶数个,中位数打印两个)
n = len(scores)
if n % 2 != 0:print(scores[n // 2])
else:print(scores[n // 2 - 1], scores[n // 2])
2.切片 - 一次获取多个元素(获取部分元素)
1)完整语法:
列表[开始下标:结束下标:步长]
开始下标 - 确定从哪个位置开始获取
结束下标 - 确定结束的位置
步长 - 确定获取方向和取的时候怎么取
2)怎么确定切片的结果:
第一步:看从开始下标到结束下标的方向和步长对应的方向是否一致
(步长为正表示从前往后取,步长为负表示从后往前取),如果不一致结果一定是空列表
第二步:确定有效范围(开始下标对应的元素取得到,结束下标对应的元素取不到)
第三步:按照步长的方向和绝对值来获取元素
方向:为正在有效范围内从前往后取;为负在有效范围内从后往前取
绝对值:绝对值为1,1个1个的取;绝对值为2,取1个跳1个再取1个;绝对值为3,取1个跳过2个再取一个
names = ['光辉', '小法', '泽拉斯', '无极剑圣', '芈月', '龙龟', '牛头', '狗头', '鳄鱼', '喵咪']
print(names[1:4:2]) # 不为空
print(names[-1:2:3]) # [空]
print(names[2:-3:1]) # 不为空print(names[0:-1:3]) # ['光辉', '无极剑圣', '牛头']
print(names[-2:1:2]) # []
print(names[3:9:-3]) # []
print(names[8:-9:-4]) # ['鳄鱼', '芈月']
print(names[1:-2:3]) # ['小法', '芈月', '狗头']
3)怎么写切片表达式获取到需要的数据:
第一步:确定开始下标 - 直接将需要获取的第一个元素在原列表中的下标作为开始下标
第二步:确定结束下标 - 根据取到的第一个数据和最后一个数据来确定有效范围,根据结束下标取不到的原则确定结束下标位置
第三步:确定步长 - 根据获取数据的方向确定步长的正负,
names = ['光辉', '小法', '泽拉斯', '无极剑圣', '芈月', '龙龟', '牛头', '狗头', '鳄鱼', '喵咪']
# ['小法', '泽拉斯', '无极剑圣']
print(names[1:4:1])
# ['光辉', '泽拉斯', '芈月']
print(names[0:5:2])
# ['无极剑圣', '狗头']
print(names[3:-2:4])
# ['鳄鱼', '龙龟', '泽拉斯']
print(names[-2:1:-3])
4)切片的省却写法
完整语法:列表[开始下标:结束下标:步长]
a.省略步长: 列表[开始下标:结束下标] - 相当于步长为1
b.省略开始下标:列表[:结束下标:步长] - 如果步长为正从第一个元素开始;如果步长为负从最后一个元素开始
c.省略结束下标:列表[开始下标::步长] - 如果步长为正一直取到最后一个元素;如果步长为负一直取到第一个元素
3.遍历 - 一个一个的获取列表中所有的元素
方法1: - 直接获取元素
for 变量 in 列表:
循环体(变量就是元素)
names = ['光辉', '小法', '泽拉斯', '无极剑圣', '芈月', '龙龟', '牛头', '狗头', '鳄鱼', '喵咪']
for x in names:print(x)
方法2: - 先获取每个元素的下标,然后再根据下标获取元素
for 变量 in range(len(列表)):
循环体(变量是元素对应的下标)
# 统计scores中不及格的人数
scores = [67, 89, 90, 99, 45, 61, 77, 23]
count = 0
for x in scores:if x < 60:count += 1
print('不及格人数:', count)for x in range(len(names)):print(x,names[x])