4.1 列表 list
之前一个变量只能存一个值。要存"全班 40 个人的名字"怎么办?总不能建 40 个变量。**列表(list)**就是用来存一串数据的。
创建列表
用方括号 [],元素之间用逗号隔开:
fruits = ["苹果", "香蕉", "橘子"]
scores = [90, 85, 77, 62]
mixed = ["小明", 18, 1.75, True] # 类型可以混着放
empty = [] # 空列表
访问元素:索引和切片
和字符串一样,从 0 开始编号,支持负数索引和切片:
fruits = ["苹果", "香蕉", "橘子", "西瓜"]
print(fruits[0]) # 苹果
print(fruits[-1]) # 西瓜
print(fruits[1:3]) # ['香蕉', '橘子']
print(len(fruits)) # 4,列表长度
⚠️ 访问不存在的位置会报错
IndexError: list index out of range。列表只有 4 个元素时,fruits[4]就越界了(最大索引是 3)。
修改列表
列表和字符串最大的区别:列表可以修改。
fruits = ["苹果", "香蕉", "橘子"]
# 改
fruits[0] = "草莓"
print(fruits) # ['草莓', '香蕉', '橘子']
# 增
fruits.append("西瓜") # 在末尾追加(最常用)
fruits.insert(1, "芒果") # 在指定位置插入
print(fruits) # ['草莓', '芒果', '香蕉', '橘子', '西瓜']
# 删
fruits.remove("香蕉") # 按值删除(删第一个匹配的)
del fruits[0] # 按位置删除
last = fruits.pop() # 删除并返回最后一个元素
print(fruits) # ['芒果', '橘子']
遍历列表
for 循环最常见的用途就是遍历列表:
scores = [90, 85, 77, 62]
for s in scores:
print(s)
需要同时拿到"序号 + 值"时用 enumerate():
fruits = ["苹果", "香蕉", "橘子"]
for i, fruit in enumerate(fruits, start=1):
print(f"{i}. {fruit}")
# 1. 苹果
# 2. 香蕉
# 3. 橘子
常用操作
scores = [90, 85, 77, 62, 85]
print(max(scores)) # 90 最大值
print(min(scores)) # 62 最小值
print(sum(scores)) # 399 求和
print(scores.count(85)) # 2 统计 85 出现次数
print(85 in scores) # True 判断是否存在
print(scores.index(77)) # 2 查找 77 的位置
scores.sort() # 排序(改变原列表)
print(scores) # [62, 77, 85, 85, 90]
scores.sort(reverse=True) # 从大到小
scores.reverse() # 反转顺序
综合例子:统计成绩
scores = []
# 录入 5 个成绩
for i in range(5):
s = int(input(f"请输入第 {i+1} 个成绩:"))
scores.append(s)
print(f"最高分:{max(scores)}")
print(f"最低分:{min(scores)}")
print(f"平均分:{sum(scores) / len(scores):.1f}")
# 统计及格人数
passed = 0
for s in scores:
if s >= 60:
passed += 1
print(f"及格人数:{passed}")
练习
- 创建一个存放你 3 个愿望的列表,用 for 循环逐个打印:"愿望 1:xxx"。
- 列表
nums = [3, 8, 1, 9, 4]:把 8 改成 80,删掉 1,末尾追加 100,然后从大到小排序并打印。 - (挑战)找出列表
[12, 45, 3, 78, 45, 9]中的第二大的数(提示:排序后取索引)。
点击查看答案
# 1
wishes = ["环游世界", "学会Python", "身体健康"]
for i, w in enumerate(wishes, start=1):
print(f"愿望 {i}:{w}")
# 2
nums = [3, 8, 1, 9, 4]
nums[1] = 80
nums.remove(1)
nums.append(100)
nums.sort(reverse=True)
print(nums) # [100, 80, 9, 4, 3]
# 3
nums = [12, 45, 3, 78, 45, 9]
nums.sort(reverse=True)
print(nums[1]) # 45
本章小结
- 列表用
[]创建,可存任意多个、任意类型的数据 - 增
append、删remove/pop、改lst[i] = x、查lst[i] len/max/min/sum/sort是高频操作- 遍历用
for x in lst,要序号用enumerate
下一节:4.2 元组 tuple