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 道题,覆盖解包、去重、成员判断和集合运算。
继续阅读: