Python 中操作列表练习题
一、遍历整个列表
练习 1.1
列表 fruits = ["苹果", "香蕉", "橙子"]。用 for 循环遍历,在循环里打印每一句:"我喜欢 xxx"(xxx 为当前水果名)。写出完整代码。
参考代码:
fruits = ["苹果", "香蕉", "橙子"]
for f in fruits:
print("我喜欢", f)
# 我喜欢 苹果
# 我喜欢 香蕉
# 我喜欢 橙子
练习 1.2
列表 nums = [1, 2, 3, 4, 5]。用 for 循环遍历,计算并打印所有元素的和(先设变量 total = 0,在循环里累加)。写出完整代码。
参考代码:
nums = [1, 2, 3, 4, 5]
total = 0
for n in nums:
total = total + n
print(total) # 15
二、range() 与创建数值列表
练习 2.1
写出下面表达式的结果(可先心算,再写 print(list(...)) 验证):
range(4)包含哪些数?range(2, 6)包含哪些数?range(0, 10, 3)包含哪些数?
答案:
- range(4):0, 1, 2, 3(不包含 4)
- range(2, 6):2, 3, 4, 5
- range(0, 10, 3):0, 3, 6, 9
练习 2.2
用 list(range(…)) 生成下面列表,写出代码:
[0, 1, 2, 3, 4][1, 2, 3, 4, 5, 6, 7, 8, 9, 10][2, 4, 6, 8, 10](2 到 10 的偶数)
参考代码:
print(list(range(5))) # [0, 1, 2, 3, 4]
print(list(range(1, 11))) # [1, 2, ..., 10]
print(list(range(2, 11, 2))) # [2, 4, 6, 8, 10]
练习 2.3
用 for 循环 + append 生成列表:[1, 4, 9, 16, 25](即 1², 2², 3², 4², 5²)。先建空列表,再在循环里对 range(1, 6) 的每个数平方后 append。写出完整代码。
参考代码:
squares = []
for x in range(1, 6):
squares.append(x ** 2)
print(squares) # [1, 4, 9, 16, 25]
三、简单统计(min、max、sum)
练习 3.1
列表 scores = [80, 90, 85, 88, 92]。用 min、max、sum 分别打印最低分、最高分和总分,再计算并打印平均分(总分/个数)。写出完整代码。
参考代码:
scores = [80, 90, 85, 88, 92]
print("最低分:", min(scores))
print("最高分:", max(scores))
print("总分:", sum(scores))
avg = sum(scores) / len(scores)
print("平均分:", avg)
练习 3.2
用 sum 和 len 写一行代码,计算列表 nums = [10, 20, 30, 40] 的平均值并打印。
参考代码:
nums = [10, 20, 30, 40]
print(sum(nums) / len(nums)) # 25.0
四、列表解析
练习 4.1
用列表解析一行生成:[1, 4, 9, 16, 25](1 到 5 的平方)。写出这行代码。
参考代码:
squares = [x ** 2 for x in range(1, 6)]
print(squares) # [1, 4, 9, 16, 25]
练习 4.2
列表 nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]。用列表解析生成一个新列表,只包含其中的偶数。写出代码并写出结果。
参考代码:
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = [n for n in nums if n % 2 == 0]
print(evens) # [2, 4, 6, 8, 10]
练习 4.3
用列表解析一行生成:从 1 到 10 中,大于 5 的数的两倍组成的列表。即结果应为 [12, 14, 16, 18, 20]。写出代码。
参考代码:
lst = [x * 2 for x in range(1, 11) if x > 5]
print(lst) # [12, 14, 16, 18, 20]
练习 4.4(常见错误)
下面写法哪里错了?应如何改?
# 意图:生成 [0, 2, 4, 6, 8]
bad = x * 2 for x in range(5)
答案: 列表解析必须写在 方括号 [] 里。正确:good = [x * 2 for x in range(5)]。
五、切片
练习 5.1
列表 nums = [10, 20, 30, 40, 50, 60]。用切片写出得到下面结果的表达式:
- 前 3 个元素:
[10, 20, 30] - 第 2 到第 4 个(索引 1 到 3):
[20, 30, 40] - 最后 2 个元素:
[50, 60] - 整个列表的反转:
[60, 50, 40, 30, 20, 10]
参考代码:
nums = [10, 20, 30, 40, 50, 60]
print(nums[:3]) # [10, 20, 30]
print(nums[1:4]) # [20, 30, 40]
print(nums[-2:]) # [50, 60]
print(nums[::-1]) # [60, 50, 40, 30, 20, 10]
练习 5.2
对列表 lst = [1, 2, 3, 4, 5] 做切片 lst[1:4],得到的新列表会不会改变原来的 lst?切片会修改原列表吗?
答案: 不会。切片总是得到新列表,不修改原列表。lst 仍然是 [1, 2, 3, 4, 5]。
六、遍历切片与复制列表
练习 6.1(遍历切片)
列表 names = ["小明", "小红", "小刚", "小丽", "小华"]。用 for 循环只遍历前 3 个元素,并打印 "你好,xxx"。写出代码。
参考代码:
names = ["小明", "小红", "小刚", "小丽", "小华"]
for name in names[:3]:
print("你好,", name)
# 你好, 小明
# 你好, 小红
# 你好, 小刚
练习 6.2(复制列表)
下面代码运行后,a 和 b 分别是什么?为什么?
a = [1, 2, 3]
b = a
b.append(4)
print(a)
print(b)
答案: a 和 b 都是 [1, 2, 3, 4]。因为 b = a 让 b 和 a 指向同一个列表,所以改 b 就相当于改 a。
练习 6.3
在练习 6.2 的基础上,若希望 b 是 a 的副本,修改 b 时不影响 a,应如何改?请用两种写法:① 切片 ② .copy()。
参考代码:
a = [1, 2, 3]
b = a[:] # 或 b = a.copy()
b.append(4)
print(a) # [1, 2, 3]
print(b) # [1, 2, 3, 4]
七、综合练习
练习 7.1
按顺序完成,写出完整代码并写出每步结果:
- 用 list(range(1, 6)) 得到
[1, 2, 3, 4, 5],赋给变量nums - 用 列表解析 生成
nums中每个元素的平方组成的列表,赋给squares - 用 切片 取
squares的前 3 个,打印 - 用 sum 计算
squares的总和,打印 - 把
nums复制一份到copy_nums(用切片),在copy_nums上 append 一个 6,再分别打印nums和copy_nums,确认nums没变
参考代码:
nums = list(range(1, 6))
print(nums) # [1, 2, 3, 4, 5]
squares = [x ** 2 for x in nums]
print(squares) # [1, 4, 9, 16, 25]
print(squares[:3]) # [1, 4, 9]
print(sum(squares)) # 55
copy_nums = nums[:]
copy_nums.append(6)
print(nums) # [1, 2, 3, 4, 5]
print(copy_nums) # [1, 2, 3, 4, 5, 6]
练习 7.2
用 for 循环 + range 生成列表:[0, -1, -2, -3, -4](即 0, -1, -2, -3, -4)。提示:可用 range(0, -5, -1)。写出代码。
参考代码:
lst = list(range(0, -5, -1))
print(lst) # [0, -1, -2, -3, -4]
练习 7.3
列表 data = [3, 1, 4, 1, 5, 9, 2, 6]。
用一行列表解析生成新列表:只保留大于 3 的元素。写出代码并写出结果。
参考代码:
data = [3, 1, 4, 1, 5, 9, 2, 6]
big = [x for x in data if x > 3]
print(big) # [4, 5, 9, 6]