1,认识列表
列表:
列表是容器型数据类型,将[ ]作为容器标志,里面多个元素用逗号隔开:[元素1, 元素2, 元素3, 元素4,…];列表是可变的(可变指的是元素的个数、值和顺序可变);列表是有序的(元素有固定位置信息–下标)。
元素:
任何Python支持的类型的数据都可以作为列表的元素,同一个列表的元素的类型可以不同,同一元素可以重复出现。
list1 = [] # 空列表
list2 = [10, 10, 20, '张三', 12.34]
list3 = [10, 20, [1, 2]]
list4 = [10, 12.5, 'abc', True, [1, 2], (10, 20), {
'a': 100}, lambda x: x*2]
2, 获取列表元素
① 获取单个元素
语法:列表[下标] - 获取列表中指定下标对应的元素
下标:下标又叫索引,代表元素在序列中的位置信息,下标值的范围有两种:
a.元素从左往右对应的下标是从0开始依次增加
b.元素从右往左对应的下标是从-1开始依次减少
heroes = ['鲁班7号', '后裔', '马可波罗', '虞姬', '孙尚香']
print(heroes[1])
print(heroes[0])
print(heroes[-2])
h = heroes[-3] # h = '马可波罗'
print(h)
② 遍历
方法一:直接获取元素
for 变量 in 列表:
循环体
# 练习:定义一个列表保存一个班所有学生的分数
scores = [45, 67, 89, 90, 77, 23, 50]
# 遍历打印每个学生的分数
for x in scores:
print(x)
# 统计不及格学生的个数
count = 0
for x in scores:
if x < 60:
count += 1
print(count)
方法二:通过下标遍历元素
len(列表) - 获取列表长度(获取列表元素的个数)
for 变量 in range(len(列表)):
循环体
scores = [45, 67, 89, 90, 77, 23, 50]
for index in range(len(scores)):
print(index, scores[index])
print('=============================')
# 练习:打印位置(下标)在偶数位上的所有元素
for index in range(len(scores)):
if index & 1 == 0:
print(scores[index])
③ 获取部分元素(列表切片) - 返回一个小列表
语法:
列表 [ 开始下标:结束下标:步长 ]
步长为正:[开始下标, 结束下标),从前往后,每次下标增加步长;
步长为负:[开始下标, 结束下标), 从后往前,每次下标增加步长。
heroes = ['鲁班7号', '后裔', '马可波罗', '虞姬', '孙尚香']
print(heroes[1:4:1]) # ['后裔', '马可波罗', '虞姬']
print(heroes[1:4:2]) # ['后裔', '虞姬']
print(heroes[0:-1:1]) # ['鲁班7号', '后裔', '马可波罗', '虞姬']
print(heroes[4:1:1]) # []
print(heroes[1:4:-1]) # []
print(heroes[-1:0:-2]) # ['孙尚香', '马可波罗']
3, 列表的增删改
① 增 - 往列表中添加元素
语法一:列表.append(元素) - 在指定列表的最后追加一个指定的元素。
movies = ['看不见的客人', '肖生克的救赎', '唐人街探案', '小森林', '忠犬八公']
movies.append('触不可及')
print(movies) # ['看不见的客人', '肖生克的救赎', '唐人街探案', '小森林', '忠犬八公', '触不可及']
movies.append('恐怖游轮')
print(movies) # ['看不见的客人', '肖生克的救赎', '唐人街探案', '小森林', '忠犬八公', '触不可及', '恐怖游轮']
语法二:列表.insert(下标, 元素) - 在列表指定下标对应元素前插入指定元素。
movies = ['看不见的客人', '肖生克的救赎', '唐人街探案', '小森林', '忠犬八公']
movies.insert(1, '星际穿越')
print(movies) # ['看不见的客人', '星际穿越', '肖生克的救赎', '唐人街探案', '小森林', '忠犬八公']
# 练习:输入一个学生的成绩,将输入的成绩插入到列表scores,并且保证插入后不影响从大到小的规律
scores = [100, 97, 95, 87, 82, 82, 80, 76, 72, 65, 60, 57, 53, 40]
grade = float(input('请输入学生成绩:'))
for index in range(len(scores)):
if scores[index] <= grade:
scores.insert(index, grade)
break
else:
scores.append(grade)
print(scores)
② 删 - 删除列表中某个元素
语法一: del 列表[下标] - 删除列表中指定下标对应的元素(下标不能越界)
TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年']
del TVs[2]
print(TVs) # ['琅琊榜', '破产姐妹', '庆余年']
语法二:列表.remove(元素) - 删除列表中指定元素(如果指定元素有多个,只删最前面那一个;如果指定元素不存在,会报错!)
TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年', '甄嬛传', '甄嬛传']
x = TVs.remove('甄嬛传')
print(TVs, x) # ['琅琊榜', '破产姐妹', '庆余年', '甄嬛传', '甄嬛传'] None
语法三:列表.pop() - 取出列表中最后一个元素,并且返回;列表.pop(下标) - 取出列表中指定下标对应的元素,并且返回。
TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年', '甄嬛传', '甄嬛传', '白夜追凶']
del_item = TVs.pop()
print(TVs, del_item) # ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年', '甄嬛传', '甄嬛传'] 白夜追凶
x = TVs.pop(1)
print(TVs, x) # ['琅琊榜', '甄嬛传', '庆余年', '甄嬛传', '甄嬛传'] 破产姐妹
③ 改 - 修改元素的值
语法:列表[下标] = 值 - 将列表中指定下标对应的元素修改成指定的值。
# 练习:列表scores,将列表中低于60分的成绩全部修改成60分
scores = [89, 9, 78, 23, 76, 99, 56, 66]
for x in range(len(scores)):
if scores[x] < 60:
scores[x] = 60
print(scores)
# [89, 60, 78, 60, 76, 99, 60, 66]
④ in 和 not in
语法:值 in 列表 - 判断列表中是否存在指定值对应的元素
语法:值 not in 列表 - 判断列表中是否不存在指定值对应的元素
nums = [[1, 2], 3, 4]
print([1, 2] in nums) # True
print(1 in nums) # False