← Python 学习路线(共 8 章)

第 3 章 列表、元组、字典与集合

red wenzi · 2026-09-15 · 编程语言 · Python · 📖 预计阅读 7 分钟 · 共 2 道练习
🎯 本章你会学到:四种内置容器怎么选,以及推导式这个效率神器。建议边读边敲,每节练习先自己做,再展开答案对照。

Python 把常用数据结构做进了语言本身:列表(有序可变)、元组(有序不可变)、字典(键值映射)、集合(去重)。选对容器,代码往往能短一半。

容器写法特点典型用途
list[1, 2, 3]有序、可变、允许重复顺序数据、需要频繁增删尾部
tuple(1, 2, 3)有序、不可变固定结构的数据、函数返回多个值
dict{"a": 1}键值映射,查找 O(1)统计、索引、缓存
set{1, 2, 3}去重、无序、查找 O(1)去重、判断存在、集合运算
容器基本操作
nums = [3, 1, 4, 1, 5]
print(len(nums), sum(nums), max(nums), min(nums))
print(sorted(nums), sorted(set(nums)))

nums.append(9)
print(nums)

freq = {}
for w in ["apple", "banana", "apple"]:
    freq[w] = freq.get(w, 0) + 1
print(freq)
运行结果
5 14 5 1
[1, 1, 3, 4, 5] [1, 3, 4, 5]
[3, 1, 4, 1, 5, 9]
{'apple': 2, 'banana': 1}

推导式:一行生成一个容器

列表 / 字典推导式
squares = [x * x for x in range(1, 6)]
evens = [x for x in range(10) if x % 2 == 0]
index = {name: i for i, name in enumerate(["Ann", "Bob"])}

print(squares)
print(evens)
print(index)
print([[r * c for c in range(1, 4)] for r in range(1, 4)])
运行结果
[1, 4, 9, 16, 25]
[0, 2, 4, 6, 8]
{'Ann': 0, 'Bob': 1}
[[1, 2, 3], [2, 4, 6], [3, 6, 9]]
⚠️ 易错点 字典的键必须可哈希(数字、字符串、元组可以,列表不行)。
⚠️ 易错点 不要用可变对象当函数默认参数(def f(a, b=[]))——默认值只在定义时创建一次,会被所有调用共享。

✍️ 本节练习

3.1必做去重排序

读入 n 个整数,去重后按升序输出(空格分隔)。

输入 第一行 n;第二行 n 个整数。

输出 一行:去重升序序列。

样例输入
6
3 1 4 1 5 3
样例输出
1 3 4 5

💡 提示 set(nums) 去重,sorted(...) 排序。

✅ 查看参考答案与解析
n = int(input())
nums = list(map(int, input().split()))
print(" ".join(str(v) for v in sorted(set(nums))))

解析 " ".join(str(v) for v in ...) 是 Python 输出空格分隔序列的惯用写法,天然不会在末尾多空格。

3.2挑战词频排行

读入一行单词,统计每个单词出现次数,按次数降序、同次数按字典序升序,输出前 3 行「单词 次数」。

输入 一行若干单词。

输出 最多三行:单词 次数

样例输入
apple banana apple cherry banana apple
样例输出
apple 3
banana 2
cherry 1

💡 提示 用字典计数,然后用 sorted(..., key=lambda kv: (-kv[1], kv[0])) 排序。

✅ 查看参考答案与解析
words = input().split()
freq = {}
for w in words:
    freq[w] = freq.get(w, 0) + 1

rank = sorted(freq.items(), key=lambda kv: (-kv[1], kv[0]))
for word, count in rank[:3]:
    print(f"{word} {count}")

解析 key 返回元组 (-次数, 单词):负号实现次数降序,单词本身升序——这是 Python 里多关键字排序的标准技巧。

📚 本文概念都在知识大全:

Python · pip 与虚拟环境 · 列表/字典/集合 · 推导式 · f-string · 异常处理 · dataclass · pandas · 模块与包