专项练习 · 7 分钟阅读

Python 元组与集合练习:固定记录与唯一值

元组和集合解决两类不同的问题:保存固定记录,以及只保留唯一值。练习在它们之间做选择,而不是默认使用列表。

把记录解包成变量

元组适合小的固定记录。解包会给每个字段一个名字,让下一行读起来像一句话。左边的变量数量必须和值数量一致。

item = ("latte", 4.5)
name, price = item
print(f"{name}: ${price:.2f}")

有名字的记录

把元组当作不可变对象

不能对元组调用 append,也不能替换某个位置。值变化时创建新元组。这种限制在记录不应该被意外修改时很有用。

point = (3, 5)
shifted = (point[0] + 1, point[1] + 1)
print(shifted)

创建新元组

去重但不保留顺序

set(values) 会为每个值保留一份。用 len(set(values)) 统计不同项。如果需要保留原顺序,单靠集合不够;可以一边遍历一边维护 seen 集合和新列表。

orders = ["latte", "tea", "latte", "mocha"]
unique = set(orders)
print(len(unique))

统计不同值

成员判断与集合运算

用 in 做成员判断,快速且易读。交集和并集回答“重叠部分”和“合并后的值”。需要稳定显示时,打印前先排序。

a = {"latte", "tea"}
b = {"tea", "mocha"}
print(sorted(a & b))
print(sorted(a | b))

重叠与并集

有意识地选择集合类型

顺序和重复项重要时用列表;固定记录用元组;唯一性或成员判断用集合。先说清楚要回答的问题,选择通常就很明显。

orders = ["latte", "tea", "latte"]
print(orders[0])
print(len(set(orders)))

位置与唯一性

你的练习清单

常见问题

元组里可以放列表吗?

可以。元组本身不可变,但里面的可变对象仍然可以改变。通常这意味着数据建模方式需要再考虑。

为什么集合的顺序每次不同?

集合是无序集合。不要依赖它的显示顺序;需要顺序时排序,或构建一个有序列表。

怎样去重又保留顺序?

遍历原列表,用 seen 集合记录见过的值,只有没见过的值才追加到结果列表。

练习元组与集合

12 道题,覆盖解包、去重、成员判断和集合运算。

打开练习

继续阅读: