跳到主要内容

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}")

练习

  1. 创建一个存放你 3 个愿望的列表,用 for 循环逐个打印:"愿望 1:xxx"。
  2. 列表 nums = [3, 8, 1, 9, 4]:把 8 改成 80,删掉 1,末尾追加 100,然后从大到小排序并打印。
  3. (挑战)找出列表 [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