python基础语法-day5
列表
需求:定义变量保存4个学生的成绩
- 方法1: - 不使用列表
s1 = 90
s2 = 89
s3 = 88
s4 = 87
print((s1 + s2 + s3 + s4) / 4)
- 方法2 - 使用列表(数据量大时,列表优先)
score = [90, 89, 88, 87]
print(sum(score) / len(score))
print(max(score))
使用推荐:如果要同时处理多个数据,可以考虑列表
认识列表(list)
1)列表是容器型数据类型(序列);将[]作为容器的标志,里面多个数据用逗号隔开:[数据1,数据2,…]
2)列表是可变的(可变指的是4列表中元素的个数和元素的值可变 - 列表支持增删改)
列表是有序的(元素有顺序对应的位置信息;元素的顺序影响结果 - 列表支持下标(索引)操作) 例如:[10, 20, 30] != [20, 10, 30]
3)列表对元素的要求:没有要求,所有类型的数据都可以作为列表的元素
注意:元素 - 容器中每一个独立的数据,就是这个容器的元素
- 空列表
list1 = [] # 加空格还是空列表
print(list1)
- 列表是有序的
print([10, 20, 30] == [30, 20, 10]) # False
print({10, 20, 30} == {30, 10, 20}) # True(集合是无序的,顺序不影响结果)
- 列表元素可以是任何类型的数据
-
一个列表中的元素可以是多个相同类型的数据
name = ['xw', 'xm']
-
一个列表中的元素可以是多个不同类型的数据
list2 = [10, 20, 'abc', None, True]
-
列表中的元素也可以是列表
list3 = [1, 2, [3, 4]]
print(list3)
查 - 获取列表中元素的值
- 查单个 - 一次获取一个元素
完整的写法
1)语法:
列表[索引]
2)说明
列表 - 需要获取元素的列表对象(可以是保存一个列表的变量,也可以是具体的列数据)
[] - 固定写法
索引 - 又叫下标;指的是元素在列表中的位置
列表一旦确定,列表中的每个元素对应的索引就确定了
a.元素从前往后索引从0开始不断增加
b.元素从后往前从-1开始不断减少
num1 = [10, 20, 30, 40]
print(num1[2]) # 30
print(num1[-2]) # 30
# print(num1[4]) # 报错!索引不能越界
- 切片 - 同时获取多个元素(切片的结果是列表)
1)完整语法:
列表[开始下标:结束下标:步长]
a.说明
列表 - 需要获取元素列表
[] - 固定写法
开始下标、结束下标、步长 - 必须是整数
开始下标 - 决定从哪开始取
结束下标 - 取到哪儿结束
步长 - 决定取的时候怎么取(是一个一个的按顺序取,还是跳着取;是从前往后取还是从后往前取)
2)使用切片
a.切片过程:确定切片结果
第一步:先确定结果是否为空,看开始下标对应的位置到结束下标对应的位置的方向和步长的方向是否一致,
一致结果不为空,不一致结果一定为空
第二步:如果结果不为空,再确定切片的有效范围,开始下标对应的元素能取到,结束下标对应元素取不到
第三步:在有效范围内按照步长的方向和绝对值获取元素。
方向:步长为正,从开始下标到结束下标从前往后取;步长为负就从后往前取
绝对值:绝对值为1,就1个一个都取;绝对值为2,取一个跳一个再取1个;绝对值为3,取1个跳2个再取…
b.怎么写切片获取指定代码
第一步:确定开始下标:需要的数据中第一个数据在列表中的下标
第二步:结束下标是结果中最后一项的后一个数据或者前一个数据的下标(方向)
确定步长:正负看趋势(从前往后取还是从后往前取);再看绝对值(看取的时候是一个一个的取的,还是跳着取的)
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]) # ['蚁人','蝙蝠侠','蜘蛛侠']
movies = ['肖申克的救赎', '霸王别姬', '阿甘正传', '钢铁侠', '蜘蛛侠', '蝙蝠侠', '蚁人', '雷神', '复仇者联盟']
# ['肖生克的救赎', '钢铁侠', '蚁人']
print(movies[0:-2:3])
# ['复仇者联盟', '雷神', '蚁人', '蝙蝠侠']
print(movies[-1:-5:-1])
# ['钢铁侠', '霸王别姬']
print(movies[-6:0:-2])
# ['雷神', '蝙蝠侠', '钢铁侠']
print(movies[-2:-7:-2])
# ['霸王别姬', 蝙蝠侠']
print(movies[1:6:4])
2)切片省略步长写法:
完整语法:列表[开始下标:结束下标:步长]
a.省略步长 - 相当于步长为1
列表[开始下标:结束下标]
b.省略开始下标 - 获取元素的从头开始取(步长为正,从第一个元素开始;步长为负,从最后一个元素开始)
列表[:结束下标:步长]
c.省略结束下标 - 获取元素的时候从开始下标开始,取完为止(有可能是取到最后一个,也有可能取到第一个)
列表[开始下标::步长]
print('-' * 60)
movies = ['肖申克的救赎', '霸王别姬', '阿甘正传', '钢铁侠', '蜘蛛侠', '蝙蝠侠', '蚁人', '雷神', '复仇者联盟']
print(movies[-1:1]) # []
print(movies[:-2:2]) # ['肖申克的救赎', '阿甘正传', '蜘蛛侠', '蚁人']
print(movies[:2:-2]) # [ '复仇者联盟','蚁人','蜘蛛侠']
print(movies[:4]) # ['肖申克的救赎', '霸王别姬', '阿甘正传', '钢铁侠']
print(movies[2::2]) # ['阿甘正传','蜘蛛侠','蚁人','复仇者联盟']
print(movies[4::-1]) # ['蜘蛛侠','钢铁侠','阿甘正传','霸王别姬','肖申克的救赎']
print(movies[3:]) # ['钢铁侠', '蜘蛛侠', '蝙蝠侠', '蚁人', '雷神', '复仇者联盟']
print(movies[::-2])
- 遍历 - 一个一个的获取列表中所有的元素
方法1 - 直接获取元素
for 变量 in 列表:
循环体(变量依次获取到的就是列表中的每个元素)
方法2 - 通过获取所有元素的下标来获取元素
for 变量 in range(len(列表)):
循环体(列表[变量])
方法3:
for 变量1, 变量2 in enumerate(列表):
循环体(变量1依次获取的是每个元素的下标;变量2依次获取的是每个元素)
注意:len(列表) - 求列表长度
scores = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 方法1:
for i in scores:
print(i, end=' ')
# 方法2:
for i in range(len(scores)):
print(i, scores[i], end=' ')
# 方法3:
for index, item in enumerate(scores):
print('index:', index, 'item:', item)
# 求总分
sum1 = 0
for i in scores:
sum1 += i
print(sum1)
# 统计90分以上的学生的人数
count = 0
for i in scores:
if i > 7:
count += 1
print(count)
farm = ['小猪', '奶牛', '鸡', '鸭', '鹅']
for i in range(len(farm)):
print(farm[i])