08.Python中操作列表练习题

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(…)) 生成下面列表,写出代码:

  1. [0, 1, 2, 3, 4]
  2. [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  3. [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

sumlen 写一行代码,计算列表 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]。用切片写出得到下面结果的表达式:

  1. 前 3 个元素:[10, 20, 30]
  2. 第 2 到第 4 个(索引 1 到 3):[20, 30, 40]
  3. 最后 2 个元素:[50, 60]
  4. 整个列表的反转[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(复制列表)

下面代码运行后,ab 分别是什么?为什么?

a = [1, 2, 3]
b = a
b.append(4)
print(a)
print(b)

答案: ab 都是 [1, 2, 3, 4]。因为 b = aba 指向同一个列表,所以改 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

按顺序完成,写出完整代码并写出每步结果:

  1. list(range(1, 6)) 得到 [1, 2, 3, 4, 5],赋给变量 nums
  2. 列表解析 生成 nums 中每个元素的平方组成的列表,赋给 squares
  3. 切片squares前 3 个,打印
  4. sum 计算 squares 的总和,打印
  5. nums 复制一份到 copy_nums(用切片),在 copy_nums 上 append 一个 6,再分别打印 numscopy_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]

发表评论