Administrator
Administrator
发布于 2026-10-31 / 0 阅读
0
0

Python 从入门到初级(05):列表、元组和集合:管理清单与去重

本篇是《Python 从入门到初级》第 5 / 20 篇。示例使用 Python 3.12 兼容语法,完整目录结构与数据见配套源码包。

一个变量适合保存一个名字,但购物清单、文件名和标签通常不止一个。本篇认识列表、元组和集合,重点理解它们分别适合表达怎样的数据。

清单、固定组合和去重需求,对应不同容器

1. 三种容器先怎么选

类型 主要特点 常见例子
list 列表 有顺序、可修改、允许重复 购物项、订单记录、待处理文件
tuple 元组 有顺序,元素引用组合不可变 宽高组合、函数返回的一组值
set 集合 不保留重复元素,不按位置索引 标签去重、成员判断、差集

集合的迭代顺序不能作为排序结果依赖;需要稳定展示时,明确使用 sorted()。元组不可变也不意味着它引用的所有内部对象都不可修改,初学时先用数字和文字组成简单元组。

2. 完整示例:清单、屏幕尺寸和标签

保存为 lesson05.py:

shopping = ["牛奶", "面包", "鸡蛋"]
shopping.append("苹果")
shopping[1] = "全麦面包"
backup = shopping.copy()
shopping.remove("鸡蛋")

screen_size = (1920, 1080)
width, height = screen_size
tags = ["python", "linux", "python", "csv"]
unique_tags = sorted(set(tags))

print("当前清单:", shopping)
print("独立的浅复制:", backup)
print("最后一项:", shopping[-1])
print("前两项:", shopping[:2])
print(f"屏幕:{width} × {height}")
print("去重并排序:", unique_tags)

购物清单先追加苹果,再把面包改名为全麦面包,最后删除鸡蛋。预期当前清单为牛奶、全麦面包、苹果;备份清单中仍有鸡蛋。最后一项是苹果,前两项不包含第三项。

屏幕尺寸被拆成 width、height 两个变量。标签经过集合去重,再排序为 ['csv', 'linux', 'python']。

3. 常用列表操作怎么读

append() 追加一个元素;extend() 把另一组元素逐个加入;remove(value) 删除第一个匹配项;pop() 取出并删除指定位置的元素,默认取最后一个。

这些操作可能修改列表本身,不一定返回新列表。例如 items = items.append("x") 会把 items 赋成 None,因为 append 的用途是原地追加。

sorted(items) 返回排序后的新列表;items.sort() 修改原列表。两者不要混淆。方法定义见 Python 数据结构说明。

4. 赋值不是复制

original = ["a", "b"]
alias = original
alias.append("c")
print(original)

预期原列表也出现 c,因为两个名字引用同一个列表。若要复制一层,可以使用 .copy()。

但浅复制不会递归复制嵌套对象。列表里如果放着字典,复制外层后,内部字典仍可能是共享的。先画出“两个名字是否指向同一对象”,比把所有赋值当成复制更准确。

5. 去重时还要关心顺序

set(tags) 适合不在意顺序的去重;sorted(set(tags)) 会排序。如果需要保留第一次出现的顺序,可以在理解下一篇字典后使用 list(dict.fromkeys(tags))。

不要直接给集合写 [0],它没有列表那样的位置索引。判断某项是否存在,用 "python" in tags 就足够直观。

6. 常见错误与练习

删除不存在的值可能产生 ValueError,访问越界索引会产生 IndexError。先检查数据是否符合预期,再决定错误该由调用方处理还是在函数内部处理。

练习:把 ['a.csv', 'b.csv', 'a.csv', 'c.csv'] 去重并按字母排序,预期得到三个文件名。再比较“按字母排序”和“保留首次出现顺序”是否总是同一个需求。

这些容器会贯穿后面的 CSV 记录、接口返回和文件整理。先选对数据结构,后面的循环与统计会容易很多。


上一篇:条件判断:把运费和业务规则写成 if · 系列目录 · 下一篇:字典与嵌套数据:描述商品和服务器档案


评论