一、列表的元素的遍历和切片
1、容器型数据类型:可以同时保存多个数据的类型有:列表,元组,字典,集合,字符串,迭代器,生成器
(容器中的每个独立的数据叫元素)
2、列表
1.什么是列表:
列表是容器型数据类型,将[ ]作为容器的标志,里面的多个数据(元素)用逗号隔开,比如[10, 20, 30]
列表时可变的(列表中元素的个数和值可变),列表是有序的
列表中的元素:可以是任何类型的数据,不同元素的类型可以不一样
scores = [56, 87, 98, 67, 90]
print(scores)
list1 = [98, 12.89, True, "abc", [1, 2, 3]]
print(list1)
2.获取列表元素
1)获取单个元素
语法:
列表[下标]
说明:
列表 - 任何结果是列表的表达式:独立的列表数据,保存列表的变量,返回值是列表的函数调用表达式,结果是列表的运算表达式
[ ] - 固定写法
下标 - 想要获取的元素对应的下标志
补充:什么是下标
下标又叫索引,是用来表示有序序列中元素的位置(顺序)
列表中的每个元素都有一个唯一并且固定的下标,用来表示这个元素在列表中的位置,下标志的范围从0开始依次增加,其中0表示第一个元素
列表中的每个元素有两种下标值,一种是正的下标值(从0开始),另一种是负的下标值(从-1开始,依次减少,-1表示最后一个元素)
注意:下标不能越界
names = ["刘备", "关羽", "张飞"]
print(names[1], names[-2]) # 关羽 关羽
2)获取部分元素 - 切片
语法:
列表[开始下标:结束下标:步长] - 从开始下标开始,每次下标值增加步长,取到结束下标前位置
说明:
列表 - 任何结果是列表的表达式:独立的列表数据,保存列表的变量,返回值是列表的函数调用表达式,结果是列表的运算表达式
[ ] - 固定写法
开始下标,结束下标 - 下标值,整数
步长 - 整数
如果步长是正,表示获取元素的时候是从前往后取,保证开始下标对应的元素要在结束下标对应的元素前面,否则切片的结果是[ ]
如果步长是负,表示获取元素的时候是从后往前取,保证开始下标对应的元素要在结束下标对应的元素后面,否则切片的结果是[ ]
注意:切片的时候下标可以越界
names = ["瑞文", "亚索", "剑姬", "盲僧", "狗头"]
print(names[1:3:1]) # ['亚索', '剑姬']
print(names[-4:3:1]) # ['亚索', '剑姬']
print(names[1:-1:2]) # ['亚索', '盲僧']
print(names[-1:1:1]) # []
print(names[-1:1:-1]) # ['狗 头', '盲僧', '剑姬']
print(names[-1:0:-2]) # ['狗头', '剑姬']
print(names[2:5:1]) # ['剑姬', '盲僧', '狗头']
3)切片语法的省略写法
a.省略步长
列表[开始下标:结束下标] —> 列表[开始下标:结束下标:1]
print(names[1:4]) # ['亚索', '剑姬', '盲僧']
print(names[-2:4]) # ['盲僧']
b.省略开始下标
列表[:结束下标:步长] / 列表[:结束下标]
步长为正,表示从第一个元素开始往后取
步长为负,表示从最后一个元素开始往前取
movies = ["肖生克的救赎", "乡村老尸", "霸王别姬", "绿里奇迹", "辛德勒的名单", "盗梦空间"]
print(movies[:-1]) # ['肖生克的救赎', '乡村老尸', '霸王别姬', '绿里奇迹', '辛德勒的名单']
print(movies[:2:-1]) # ['盗梦空间', '辛德勒的名单', '绿里奇迹']
print(movies[:0:-2]) # ['盗梦空间', '绿里奇迹', '乡村老尸']
c.省略结束下标
列表[开始下表::步长] / 列表[开始下表:]
步长为正,从前往后取到最后一个元素为止
步长为负,从后往前取到最后一个元素为止
print(movies[-3:]) # ['绿里奇迹', '辛德勒的名单', '盗梦空间']
print(movies[-1::2]) # ['盗梦空间']
同时省略开始下标和结束下标
列表[::步长] / 列表[:]
步长为正,从第一个元素取到最后一个元素
步长为负,从最后一个元素取到第一个元素
print(movies[::-1]) # ['盗梦空间', '辛德勒的名单', '绿里奇迹', '霸王别姬', '乡村老尸', '肖生克的救赎']
print(movies[:]) # ['肖生克的救赎', '乡村老尸', '霸王别姬', '绿里奇迹', '辛德勒的名单', '盗梦空间']
print(movies[::2]) # ['肖生克的救赎', '霸王别姬', '辛德勒的名单']
4)遍历列表 - 将列表中的元素一个一个的取出来
方法一:直接法
for 变量 in 列表:
循环体
方法二:通过下标间接获取
for 下标 in 下标对应的数字序列:
列表[下标]
循环体
movies = ["肖生克的救赎", "乡村老尸", "霸王别姬", "绿里奇迹", "辛德勒的名单", "盗梦空间"]
for m in movies:
print(m)
len(列表) - 返回列表中元素的个数
for index in range(len(movies)):
print(movies[index])
练习1:用一个列表保存一个班所有学生的分数,统计不及格学生的人数
count = 0
scores = [97, 56, 78, 66, 73, 43, 59, 76, 21]
for x in scores:
if x < 60:
count += 1
print("不及格人数:", count)
练习2:用一个列表保存一个班所有学生的分数,计算班级学生的平均分
count = 0
scores = [97, 56, 78, 66, 73, 43, 59, 76, 21]
for x in scores:
count += x
mean = count / len(scores)
print("平均分:", mean)
二、列表元素的增删改
1.增 - 添加元素
1)append - 追加
列表.append(元素) - 在指定列表的的最后添加指定的元素
list1 = [10, 20, 30]
print(list1)
list1.append(100)
print(list1)
2)insert - 插入
列表.insert(下标, 元素) - 在指定列表指定下标对应的元素前插入指定的位置
list1 = [10, 20, 30]
list1.insert(1, 100)
print(list1)
练习:不断输入学生的成绩,并且把所有输入的成绩保存在一个列表中,输入-1表示结束
list1 = []
while True:
score = float(input("请输入成绩"))
if score == -1:
break
list1.append(score)
print(list1)
2.删 - 删除元素
1)del语句
del 列表[下标] - 删除列表中指定下标对应的元素(下标不能越界)
teleplays = ["甄嬛传", "大明王朝", "琅琊榜", "庆余年", "还珠格格", "请回答1988"]
del teleplays[2]
print(teleplays)
del teleplays[-4]
print(teleplays)
2)remove
列表.remove(元素) - 删除列表中指定的元素(如果指定的元素不存在,程序报错,如果指定的元素存在多个,只删最前面的那一个)
teleplays = ["甄嬛传", "大明王朝", "琅琊榜", "庆余年", "还珠格格", "请回答1988", "甄嬛传"]
teleplays.remove("甄嬛传")
print(teleplays)
3)pop
列表.pop() - 取出列表中最后一个元素,并且返回被取出的元素
列表.pop(下标) - 取出列表中指定下标对应的元素,并且返回被取出的元素
teleplays = ["甄嬛传", "大明王朝", "琅琊榜", "庆余年", "还珠格格", "请回答1988", "甄嬛传"]
t = teleplays.pop(1)
print(teleplays)
print(t)
t = teleplays.pop()
print(teleplays)
print(t)
3.改 - 修改元素的值
a.列表[下标] = 新元素 - 将列表中指定下标对应的元素修改成新的元素(下标不能越界)
anime = ["火影忍者", "海贼王", "死神", "天线宝宝", "死亡笔记"]
anime[-2] = "海绵宝宝"
print(anime)
练习:[89, 45, -55, 30, -78, 90, -34, 87, 10, 59, 100, -19],将列表中所有的负数都改成0
list2 = [89, 45, -55, 30, -78, 90, -34, 87, 10, 59, 100, -19]
for index in range(len(list2)):
if list2[index] < 0:
list2[index] = 0
print(list2)
- b.列表1[开始下标:结束下标] = 列表2 - 将列表1中开始下标到结束下标中的所有元素替换成列表2中所有元素
nums = [10, 20, 30, 40, 50]
nums[1:3] = [100, 200, 300]
print(nums)
4.in 和 not in
元素 in 列表 - 判断指定元素是否在指定列表中
元素 in not 列表 - 判断指定元素是否不在指定列表中
print(10 in nums) # True
print(20 not in nums) # True