1.容器型数据类型
可以同时保存多个数据的类型。常见容器型数据类型有:列表,元组,字典,集合,字符串,迭代器,生成器
容器中的每个独立的数据叫元素
2.列表
2.1 什么是列表
列表是容器型数据类型,将 [] 作为容器的标志,里面的多个数据(元素)用逗号隔开。比如:[10,20,30]
列表中元素的个数和值可变;列表是有序的
列表中的元素:可以是python支持的任何数据类型;不同元素的数据类型可以不一样
scores = [90, 85, 90, 93, 100, 92]
print(scores)
list1 = [89, 34.78, True, 'abc', [1, 2, 3]]
print(list1)
2.2 获取列表元素
1)获取单个元素
语法:列表[下标]
说明:
列表 - 可以是任何结果是列表的表达式: 独立的列表数据、保存列表的变量、返回值是列表的函数调用表达式、结果是列表的运算表达式
[] - 固定写法
下标 - 下标又叫索引,是用来表示有序序列中的位置(顺序)。列表中的每个元素都有一个唯一并且固定的下标用来表示这个元素在列表中的位置,下标值的范围从0开始增加,0表示第一个元素列表中的每个元素有两种下标值,一种是正的下标值(从0开始),另一种是负的下标值(从-1开始,依次减少,-1表示最后一个元素)
[1, 2, 3, 4]
names = ['张三', '李四', '王五']
print(names[1])
print(names[-2])
print(names[10]) # 数组越界:list index out of range
2)获取部分元素 - 切片
语法:列表[开始下标:结束下标:步长]
说明:
从开始下标开始,每次下标增加步长,取到结束下标前为止。如果步长是正,表示获取元素的时候是在开始下标到结束下标的范围内从左往右取。如果步长是负,表示获取元素的时候是从后往前取,保证开始下标对应的元素要在结果下标对应的元素后面,否则切片结果是[]。
列表 - 可以是任何结果是列表的表达式: 独立的列表数据、保存列表的变量、返回值是列表的函数调用表达式、结果是列表的运算表达式
[] - 固定写法
开始下标、结束下标 - 下标值,整数
步长 - 整数
注意:切片的时候,下标可以越界
nums = [1, 2, 3, 4, 5, 6, 7, 8]
print(nums[2: 5: 1]) # range(1, 4, 1) -> 3,4,5
print(nums[-6: 5: 1]) # 3,4,5
print(nums[-1: -9: -1])
3)切片语法的省略写法
a.省略步长
列表[开始下标:结束下标] -> 列表[开始下标:结束下标:1]
print(nums[1:4]) # 2,3,4
b.省略开始下标
列表[:结束下标:步长] / 列表[:结束下标]
步长为正,表示从第一个元素开始往后取
步长为负,表示从最后一个元素开始往前取
print(nums[:-1]) # 1, 2, 3, 4, 5, 6, 7
print(nums[:4:-1]) # 8, 7, 6
c.省略结束下标
列表[开始下标::步长] / 列表[开始下标:]
步长为正,取到最后一个元素为止;步长为负,取到第一个元素为止
d.同时省略开始下标和结束下标
列表[::步长] / 列表[:]
步长为正,从第一个元素取到最后一个元素
步长为负,从最后一个元素取到第一个元素
print(nums[::-1]) # 8, 7, 6, 5, 4, 3, 2, 1
print(nums[:]) # 1, 2, 3, 4, 5, 6, 7, 8
4)遍历列表
方法一:直接法
for 变量 in 列表:
循环体
for i in nums:
print(i)
方法二:通过下标间接获取
for 下标 in 下标对应的数字序列:
列表[下标]
循环体
for i in range(len(nums)):
print(nums[i])
# 练习1:用一个列表保存一个班所有的学生的分数,统计不及格的学生的分数
scores = [90, 85, 90, 93, 100, 92, 55, 29, 72, 61, 59, 57, 87, 72]
for i in scores:
if i < 60:
print(i)
# 练习2:用一个列表保存一个班所有的学生的分数,计算机班级平均分
scores = [90, 85, 90, 93, 100, 92, 55, 29, 72, 61, 59, 57, 87, 72]
sum = 0
for i in scores:
sum += i
avg = sum / len(scores)
print('平均分:', avg)
3.添加元素
1)append - 追加元素
列表.append(元素) - 在指定列表的最后添加指定的元素
list1 = [10, 20, 30]
print(list1)
list1.append(100)
print(list1)
2)insert - 插入
列表.insert(下标,元素) - 在指定列表下标对应的元素前插入指定的元素
list1 = [10, 20, 30]
list1.insert(1,15)
print(list1)
#练习:不断输入学生的成绩,并且把所有输入的成绩保存在一个列表中,输入-1表示结束
scores = []
while True:
sc = int(input('请输入成绩:'))
if sc == -1:
break
scores.append(sc)
print(scores)
4.删除元素
1)del语句
del 列表[下标] - 删除列表中指定下标对应的元素(下标不能越界)
teleplay = ['甄嬛传','大明王朝','琅琊榜','庆余年','还珠格格','请回答1988']
del teleplay[1]
print(teleplay)
del teleplay[-2]
print(teleplay)
2)remove
列表.remove(元素) - 删除列表中指定的元素
如果指定元素不存在,程序会报错;如果指定的元素存在多个,只删除最前面那个
3)pop
列表.pop() - 取出列表中的最后一个元素,并且返回被取出的元素
列表.pop(下标) - 取出列表中指定下标对应的元素,并且返回被取出的元素
teleplay = ['甄嬛传','大明王朝','琅琊榜','庆余年','还珠格格','请回答1988']
t = teleplay.pop(1)
print(teleplay) # '甄嬛传', '琅琊榜', '庆余年', '还珠格格', '请回答1988'
print(t) # 大明王朝
# 练习:已知一个分数列表:[89,45,55,30,78,90,34,87,10,59,100],删除列表中所有低于60的成绩
# 结果:[89,78,90,87,100]
scores = [89,45,55,30,78,90,34,87,10,59,100]
scores1 = []
a = 0
for i in range(0, len(scores)):
if i == len(scores):
break
if scores[i] > 60:
scores1.append(scores[i])
scores = scores1
print(scores)
5.修改元素的值
a.列表[下标] = 新元素
将列表中指定下标对应的元素改成新的元素,下标不能越界
animes = ['火影忍者', '海贼王', '死神', '天线宝宝', '死亡笔记']
animes[3] = '海绵宝宝'
print(animes)
# 练习:将列表[89,45,-55,30,-78,90,-34,87,-34,87,10,59,100,-19]中所有负数都改成0
# [89,45,0,30,0,90,0,87,10,59,100,0]
scores = [89,45,-55,30,-78,90,-34,87,-34,87,10,59,100,-19]
a = 0
for i in range(0, len(scores)):
if i == len(scores):
break
if scores[i] < 0:
scores[i] = 0
print(scores)
b.列表1[开始下标:结束下标] = 列表2
nums = [10, 20, 30, 40, 50]
# nums[1:3] = [100] # [10, 100, 40, 50]
# nums[1:3] = [100, 200] # [10, 100, 200, 40, 50]
nums[1:3] = [100, 200, 300] # [10, 100, 200, 300, 40, 50]
print(nums)
6.in 和 not in
元素 in 列表 - 判断指定元素是否在指定列表中
元素 in not 列表 - 判断指定元素是否不在列表中
nums = [10, 20, 30, 40, 50]
print(10 in nums) # True
print(20 not in nums) # False