第二周 Day 1 — 列表
一、认识列表
heroes = ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯']
for hero in heroes:
print('我喜欢的英雄是', hero)
1. 什么是列表
列表是容器型数据类型,将[]
作为容器标志,里面多个元素用逗号隔开:[元素1, 元素2, 元素3, 元素4,...]
。
列表是可变的(可变值得是元素的个数、值和顺序可变)
列表是有序的(元素有固定位置信息——下标)
元素:任何Python支持的类型的数都可以作为列表,同一个列表的元素的类型可以不同。
list1 = [] # 空列表
list2 = [10, 20, 10, 'abc',12.34, [10, 20], (10, 20), {'a':100},lambda x: x * 2]
二、列表的增删改查
1.“查”—获取元素
-
获取单个元素
语法: 列表[下标] — 获取列表中指定下标的元素
下标又叫索引,代表元素在序列中的位置信息。
下标值的范围有两种:
a.元素从左往右对应的下标是从0开始依次增加。
b.元素从右往左对应的下标是从-1开始依次减少。
heroes = ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯'] print(heroes[0]) # 亚索 print(heroes[1]) # 永恩 print(heroes[2]) # 劫 print(heroes[-1]) # 金克斯 print(heroes[-2]) # 卡莉斯塔 print(heroes[6]) # 下标越界 print(heroes[-7]) # 下标越界
-
遍历
2.1 方法一:直接获取元素。
""" for 变量 in 列表: 循环体 """ for x in heroes: print('x:', x)
练习:定义一个列表保存一个班所有学生的分数。
# 1. 求所有学生的总分 # 2. 统计不及格学生的分数 scores = [45, 67, 89, 90, 77, 23, 50] sums = 0 count = 0 for score in scores: sums += score if score < 60: count += 1 print('总分:', sums) print('不及格学生的个数:', count)
2.2 方法二:通过下标遍历元素。
len(列表) — 获取列表长度(获取列表元素的个数)
""" for 变量 in range(len(列表)): 循环体 """ scores = [45, 67, 89, 90, 77, 23, 50] for index in range(len(scores)): print(index) # 0 1 2 3 4 5 6 print(scores[index]) # 45 67 89 90 77 23 50
练习:打印位置(下标)在偶数位上的所有元素。
scores = [45, 67, 89, 90, 77, 23, 50] for index in range(len(scores)): if not index & 1: print(scores[index])
-
获取部分元素(列表切片)— 返回一个小列表。
语法: 列表[开始下标:结束下标:步长]
步长为正:[开始下标,结束下标),从前往后,每次下标增加步长。
步长为负:[开始下标,结束下标),从后往前,每次下标增加步长。
heroes = ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯'] print(heroes[1:4:1]) # ['永恩', '劫', '薇恩', '卡莉斯塔'] print(heroes[1:4:2]) # ['永恩', '薇恩', '金克斯'] print(heroes[0:-1:1]) # ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔'] print(heroes[5:1:1]) # [] print(heroes[1:5:-1]) # [] print(heroes[-1:-5:1]) # [] print(heroes[-1:0:-2]) # ['金克斯', '薇恩', '永恩']
3.1 省略步长
列表[开始下标:结束下标] == 列表[开始下标:结束下标:1]
heroes = ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯'] print(heroes[1:5]) # ['永恩', '劫', '薇恩', '卡莉斯塔'] print(heroes[-5:-2]) # ['永恩', '劫', '薇恩'] print(heroes[0:-3]) # ['亚索', '永恩', '劫'] print(heroes[-1:2]) # []
3.2 省略开始下标
列表[:结束下标:步长]
列表[:结束下标]
如果步长为正:开始下标省,就从第一个元素往后取。
如果步长为负:开始下标省,就从最后一个元素往前取。
heroes = ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯'] print(heroes[:3]) # ['亚索', '永恩', '劫'] print(heroes[:3:-1]) # ['金克斯', '卡莉斯塔'] print(heroes[:-3:1]) # ['亚索', '永恩', '劫'] print(heroes[:-5:-2]) # ['金克斯', '薇恩'] print(heroes[:4:3]) # ['亚索', '薇恩']
3.3 省略结束下标
列表[开始下标::步长]
列表[开始下标:]
如果步长为正:结束下标省,就从开始下标元素开始从前往后取,取到最后一个元素为止。
如果步长为负:结束下标省,就从开始下标元素开始从后往前取,去到第一个元素为止。
heroes = ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯'] print(heroes[1:]) # ['永恩', '劫', '薇恩', '卡莉斯塔', '金克斯'] print(heroes[-3:]) # ['薇恩', '卡莉斯塔', '金克斯'] print(heroes[2::2]) # ['劫', '卡莉斯塔'] print(heroes[-3::-1]) # ['薇恩', '劫', '永恩', '亚索']
3.4 一起省
列表[::步长]
如果步长为正:从前往后取,取整个列表。
如果步长为负:从后往前取,取整个列表。
heroes = ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯'] print(heroes[::2]) # ['亚索', '劫', '卡莉斯塔'] print(heroes[:]) # ['亚索', '永恩', '劫', '薇恩', '卡莉斯塔', '金克斯'] print(heroes[::-1]) # ['金克斯', '卡莉斯塔', '薇恩', '劫', '永恩', '亚索']
2.“增” — 往列表中添加元素
-
列表末尾追加
列表.append(元素) — 在指定列表的最后追加一个指定的元素
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]
score = int(input('输入一个成绩:'))
for index in range(len(scores)):
if score > scores[index]:
scores.insert(index, score)
break
else:
scores.append(score)
print(scores)
3.“删” — 删除列表中某个元素
del 列表[下标] — 删除列表中指定下标对应的元素(下标不能越界)
# a.删除变量
name = '小明'
del name
print(name) # 报错
# b. 删除列表中指定元素
nums = [10, 1, 2, 32]
del nums[-1]
print(nums) # [10, 1, 2]
# c. 删除整个列表
del nums
print(nums) # 报错
列表.remove(元素) — 删除列表中指定元素(如果指定元素有多个,只删最前面那一个;如果指定元素不存在,会报错!)
TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年']
TVs.remove('甄嬛传')
print(TVs) # ['琅琊榜', '破产姐妹', '庆余年']
TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年','甄嬛传', '甄嬛传']
TVs.remove('甄嬛传')
print(TVs) # ['琅琊榜', '破产姐妹', '庆余年', '甄嬛传', '甄嬛传']
TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年']
TVs.remove('大江大河')
print(TVs) # 报错ValueError: list.remove(x): x not in list
列表.pop() — 取出列表中最后一个元素
列表.pop(下标) — 取出列表中指定下标对应的元素
TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年','甄嬛传', '甄嬛传', '白夜追凶']
del_items = TVs.pop()
print(TVs, del_items) # ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年','甄嬛传', '甄嬛传'] 白夜追凶
TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年','甄嬛传', '甄嬛传', '白夜追凶']
TVs.pop(1)
print(TVs) # ['琅琊榜', '甄嬛传', '庆余年','甄嬛传', '甄嬛传', '白夜追凶']
4.“改” — 修改元素的值
语法:列表[下标] = 值 — 将列表中指定下标对应的元素修改成指定的值
subject = ['高数', '大物', 'c语言', '毛概']
subject[0] = '英语'
print(subject) # subject = ['英语', '大物', 'c语言', '毛概']
练习:已经列表scores,将列表中低于60分的成绩全部修改成60分。
scores = [89, 9, 78, 23, 76, 99, 66]
for index in range(len(scores)):
if scores[index] < 60:
scores[index] = 60
print(scores) # [89, 60, 78, 60, 76, 99, 66]
5. in
和 not in
值 in 列表 — 判断列表中是否存在指定值对应的元素
值 not in 列表 — 判断列表中是否不存在指定值对应的元素
TVs = ['琅琊榜', '破产姐妹', '甄嬛传', '庆余年', '甄嬛传', '甄嬛传', '白夜追凶']
print('甄嬛传' in TVs) # True
print('甄嬛传2' in TVs) # False
print('甄嬛传2' not in TVs) # True