day6-列表
1.列表基础
需求:定义变量保存的6个学生成绩
方法一 - 不使用列表
s1 = 90
s2 = 87
s3 = 92
s4 = 67
s5 = 55
s6 = 69
s7 = 71
print((s1 + s2 + s3 + s4 + s5 + s6 + s7) / 7)
max1 = s1
if s2 > max1:
max = s2
if s2 > max1:
max = s3
if s2 > max1:
max = s4
if s2 > max1:
max = s5
if s2 > max1:
max = s6
if s2 > max1:
max = s7
print(max1)
方法2 - 使用列表
scores = [90, 87, 92, 67, 55, 69, 87, 99]
print(sum(scores) / len(scores))
print(max(scores))
使用推荐:如果要同时处理多个数据,可以考虑列表
-
认识列表(list)
-
列表是容器型数据类型(序列)﹔将[]作为容器的标志,里面多个数据用逗号隔开︰【数据1,数据2,数据3,…]
-
列表是可变的(可变指的是列表中元素的个数和元素的值可变 - 列表支持增删改)
列表是有序的(元素有顺序对应的位置信息;元素的顺序影响结果 - 列表支持索引操作) -
列表对元素的要求:没有要求,任何类型的数据都可以作为列表的元素
-
注: 元素 - 容器中没每一个独立的数据,就是这个容器的元素
1) 空列表
list1 = []
print(list1)
2) 列表是有序的
print([10, 20, 30] == [30, 10, 20]) #False
print({10,20,30} == {30,10,20}) #True(集合是无序的,顺序不影响结果)
3) a. 列表元素可以是任何类型的数据
list2 = [10, 20, 40]
names = ['小明','小花','张三']
b. 一个列表的元素可以是多个不同类型的数据
list3 = [10, 1.23, True, None, '小花']
c. 列表中的元素也可以是列表
list4 = [10, 20, [30, 40]]
2.列表查操作 - 获取列表中的值
1.查单个 - 获取一个元素
1)语法:
列表[索引]
2)说明:
列表 - 需要获取元素的列表对象(可以是保存一个列表的变量,也可以是具体的列数据)
[] - 固定写法
索引 - 又叫下标;指的是元素在列表中的位置
列表一旦确定,列表中的每个元素对应的索引就确定:
a.元素从前往后索引从0开始不断增加
b.元素从后往前从-1开始不断减少
nums = [10,20,30,40]
print(nums[1])
print([10, 20, 30, 40][1])
print(nums[-1])
print(nums[3])
# print(nums[4]) # 报错!索引不能越界
# print(nums[-6]) # 报错!索引不能越界
2.切片 - 同时获取多个元素(列表结果的结果是列表)
-
完整语法:
列表[开始下标:结束下标:步长]
-
说明
列表 - 需要获取元素列表
[] - 固定写法
开始下标、结束下标、步长 - 必须是整数
开始下标 - 决定从哪开始取
结束下标 - 决定取到哪里结束
步长 - 决定取的时候怎么取(是一个一个的按顺序取,还是跳着取;是从前往后取还是从后往前取)
-
-
使用切片
-
确定切片结果
-
先确定结果是否为空,看开始下标对应的位置到结束下标对应的位置的方向和步长的方向是否一致
一致结果不为空,不一致结果一定为空
-
如果结果不为空,再确定切片的有效范围:开始下标对应的元素能取到,结束下标对应元素取不到
-
在有效范围内容,按照步长的反向和绝对值获取元素。
方向∶步长为正,从开始下标到结束下标从前往后取;步长为负就从后往前取
绝对值∶绝对值为1,就1个1个的取;绝对值为2,取1个跳1个再取1个;绝对值为3,取1个跳2个再取1个;…
-
-
怎么写切片代码获取指定元素
确定开始下标:需要的结果中第一个数据在列表的下标
确定结束下标:结束下标是结果中最后一项的后一个数据或者前一个数据的下标(看方向)
确定步长∶正负看趋势(从前往后取还是从后往前取);再看绝对值(看取的时候是一个一个的取的,还是跳着取的)
-
movies = ['肖生克的救赎', '霸王别姬', '阿甘正传', '钢铁侠','蜘蛛侠','蝙蝠侠','蚁人','雷神','复仇者联盟']
print(movies[1:3:1]) # ['霸王别姬','阿甘正传']
print(movies[0:-2:2]) # ["肖生克的救赎’,‘阿甘正传',‘蜘蛛侠','蚁人']
print(movies[5:0:2]) # []
print(movies[3:-1:-1]) # []
print(movies[-2:2:-2]) # ['雷神','蝙蝠侠','钢铁侠']
print(movies[6:2:-3]) # [‘蚁人’,'钢铁侠']
print(movies[1:-3:3]) # ['霸王别姬','蜘蛛侠']
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[1:4:1])
#['阿甘正传','蜘蛛侠',‘蚁人']
print(movies[2:7:2])
#['雷神','阿甘正传']
print(movies[-2:1:-5])
# ['肖生克的救赎', '钢铁侠', '蚁人']
print(movies[0:-2:3])
# ['复仇者联盟', '雷神', '蚁人', '蝙蝠侠']
print(movies[-1:-5:-1])
# ['钢铁侠', '霸王别姬']
print(movies[3:0:-2])
# ['雷神', '蝙蝠侠', '钢铁侠']
print(movies[-2:2:-2])
# ['霸王别姬', 蝙蝠侠']
print(movies[1:-3:3])
3.切片省略的写法
完整的切片语法:列表[开始下标:结束下标:步长]
- 省略步长 - 相当于步长为1
列表[开始下标:结束下标] - 省略开始下标 - 获取元素的从头开始取(步长为为正,从第一个元素开始;步长为负,从最后一个元素开始)
列表[:结束下标:步长]
movies =['肖生克的救赎','霸王别姬','阿甘正传','钢铁侠','蜘蛛侠','蝙蝠侠','蚁人','雷神','复仇者联盟']
print(movies[1:4]) # ['霸王别姬', '阿甘正传', '钢铁侠']
print(movies[-1:1]) # []
print(movies[:-2:2]) # ['肖生克的救赎','阿甘正传','蜘蛛侠','蚁人']
print(movies[:2:-2]) # ['复仇者联盟','蚁人','蜘蛛侠']
print(movies[:4]) # ['肖生克的救赎','霸王别姬','阿甘正传','钢铁侠']
3.遍历 - 一个一个的获取列表中所有的元素
-
方法1:
for 变量 in 列表:
循环体(变量依次获取到的就是列表中的每个元素) -
方法2:
for 变量 in range(列表长度):
循环体(列表[变量]) -
方法3:
for 变量1,变量2 in enumerate():
循环体(变量1依次获取的是每个元素的下标;变量2依次获取的是每个元素)
scores = [ 90,89,87,81,79,93,67,56,43,99]
# 方法1:
for x in scores:
print(x)
# 求总分
sum1 = 0
for x in scores:
sum1 += 1
print(sum1)
# 统计90分以上的学生的人数
count = 0
for x in scores:
if x > 90:
count += 1
print('90分以上的学生人数:', count)
list1= [
[10, 20],
[100, 200],
[1, 2]
]
for x in list1:
print('x:',x[-1])
scores = [ 90,89,87,81,79,93,67,56,43,99]
for x in range(len(scores)):
print(x,scores[x])
for x, y in enumerate(scores):
print('x:',x,'y:',y)