当前位置:首页>python>学习AI第三天:我开始接触 Python 的元组、集合和字典了

学习AI第三天:我开始接触 Python 的元组、集合和字典了

  • 2026-09-08 03:27:04
学习AI第三天:我开始接触 Python 的元组、集合和字典了
今天是我学习 AI 的第三天。

前两天,我主要在熟悉 Python 里的基础语法,比如运算符、字符串、分支和循环。到了第三天,开始接触几个非常重要的数据结构:

元组、集合、字典。

如果说前两天学的是“程序怎么写”,那今天更像是在学习:

程序里的数据,到底该怎么组织。

这一步其实非常关键。

因为以后无论是写普通 Python 程序,还是做 AI 应用开发,你都会经常和各种数据结构打交道。比如:

  • 接口返回的数据怎么存

  • 文本去重怎么做

  • 用户信息怎么组织

  • 两组数据怎么求交集

  • 键值映射怎么转换

这些背后,都会用到今天学的内容。


一、为什么第三天开始学这些?

因为写程序,归根到底离不开两件事:

  • 处理逻辑

  • 处理数据

前两天我更多是在练逻辑,比如条件判断、循环执行。而今天开始,我接触的是 Python 里最常用的几种数据容器。

它们分别适合不同场景:

  • 元组:适合存一组固定不变的数据

  • 集合:适合做去重、交集、并集这类运算

  • 字典:适合做“键值对应”的数据组织

这些内容一旦掌握好,后面写代码就会更顺。


二、第一题:列表元素去重

今天第一道题,是一个非常典型的集合练习题:

给定一个列表:

li=[1, 1, 2, 3, 4, 7, 8, 2, 1, 2]

要求去除重复元素。

我写的代码是:

li=[1, 1, 2, 3, 4, 7, 8, 2, 1, 2]li=list(set(li))print(li)

输出结果类似:

[1, 2, 3, 4, 7, 8]

这道题最核心的知识点就是:

集合(set)天然具有去重功能

因为集合里的元素不能重复,所以只要把列表转成集合,重复元素就会自动被去掉。然后如果还想再变回列表,就再套一层 list()。

也就是:

list(set(li))

这写法很简洁,也很常用。


三、为什么集合能去重?

因为集合本身的设计规则就是:

  • 元素无序

  • 元素唯一

  • 不允许重复

也正因为这个特性,集合特别适合做下面这些事情:

  • 去重

  • 求交集

  • 求并集

  • 求差集

  • 判断成员是否存在

所以今天这道去重题,其实是在帮我真正理解:

集合不是“长得像列表的东西”,而是一个有明确用途的数据结构。

它最适合的,就是处理“唯一性”问题。


四、补充一点:去重后顺序可能会变

用 list(set(li)) 这种方式去重,虽然简单,但有一个特点:

去重后元素顺序不一定和原列表一致。

这是因为集合本身是无序的。

所以如果题目只要求“去重”,这样写就完全没问题。但如果题目要求“去重后还保持原顺序”,那就不能只靠集合了。

这一点,也让我对数据结构有了更具体的感受:

选对数据结构,不只是会不会写的问题,而是它的特性是否适合当前场景。


五、第二题:判断两个字符串中相同字符的个数

第二题是这样的:

给定任意两个字符串 s1 和 s2,判断 s1 中的字符在 s2 中存在的个数,要求是:

重复的字符只算 1 个。

比如:

s1 = "aabbcc"s2 = "bcdxyz"

因为两个字符串中共同出现的字符是:

  • b

  • c

所以结果应该是 2。

一条语句就可以写出来:

print(len(set(s1)&set(s2)))

六、这一题背后其实是在学“集合交集”

这行代码看起来不长,但信息量很大。

先看:

set(s1)

它会把字符串 s1 转成集合,并自动去重。

比如:

set("aabbcc")

得到的是:

{'a','b','c'}

同理:

set("bcdxyz")

得到的是:

{'b','c','d','x','y','z'}

接着:

set(s1) & set(s2)

这里的 & 表示 交集,也就是两个集合中共同拥有的元素。

结果就是:

{'b', 'c'}

最后再用:

len(...)

统计数量,就得到 2。


七、我对集合的理解更清楚了

通过这两道题,我对集合的用途开始有点感觉了。

集合特别适合处理这类问题:

  • 是否重复

  • 是否存在公共元素

  • 去重后的元素有哪些

  • 两组数据的重合部分是什么

以前如果只看概念,可能会觉得集合就是“又一种容器”。但真正写题后会发现:

集合的价值,不在于存数据,而在于处理“关系”。

比如今天这个交集问题,如果不用集合来做,代码就会更绕。但用了集合,逻辑就很直接。

这也是 Python 很舒服的一点:合适的数据结构一用上,很多问题会立刻变得清晰。


八、第三题:将字典中的键和值互换

今天第三题,是字典相关的练习:

比如有一个字典:

d = {"a": 1, "b": 2, "c": 3}

要求把它的键和值互换,变成:

{1: "a", 2: "b", 3: "c"}

代码如下:

d={"a": 1, "b": 2, "c": 3}new_d={v: k for k, v in d.items()}print(new_d)

九、这道题让我开始真正接触字典

字典在 Python 里是一个特别常用的数据结构。

它的特点是:

通过键(key)找到值(value)

也就是说,它不是靠位置取数据,而是靠“名字”取数据。

比如:

  • 用户名对应用户信息

  • 商品编号对应商品详情

  • 字段名对应字段值

  • 配置项对应配置内容

这些场景,字典都非常适合。

而今天这道题,其实是让我练习两件事:

1. 怎么遍历字典

这里用到了:

d.items()

它会把字典里的每一组键值对取出来。

2. 怎么构造新字典

这里用到了字典推导式:

{v: k for k, v in d.items()}

意思就是:

  • 遍历原字典中的每一对 k, v

  • 在新字典中,把 v 放前面当键

  • 把 k 放后面当值

最后就完成了键值互换。


十、这道题也让我意识到一个前提

字典键值互换虽然不难,但有一个前提:

原字典中的 value 必须唯一

因为字典的键不能重复。

比如如果原字典是:

{"a": 1, "b": 1}

那你互换之后就会变成:

{1: "b"}

前面的 "a" 会被覆盖掉。

所以这道题虽然简单,但也让我开始注意到:

写代码时,不只是看“能不能写出来”,还要看数据本身是否满足规则。

这其实就是编程思维慢慢变严谨的过程。


十一、今天的整体收获

今天这三道题做完,我对元组、集合、字典的理解,比单纯看定义清楚多了。

尤其是集合和字典,我感觉已经不再只是“记概念”了,而是真正开始知道它们能拿来干什么。

今天我最大的几个收获是:

1. 集合特别适合去重

像 list(set(li)) 这种写法非常直接。

2. 集合特别适合求公共元素

交集运算一上来,代码一下子就变简洁了。

3. 字典特别适合做映射关系

键和值的对应关系,是很多程序数据组织的核心方式。

4. 数据结构不是背定义,而是看场景

什么时候该用列表,什么时候该用集合,什么时候该用字典,这比死记定义更重要。


十二、作为一个 Java 程序员,我今天的一个明显感受

今天学这些内容时,我有个很明显的感觉:

Python 在处理这类“小而明确”的数据操作时,真的非常轻巧。

比如:

  • 去重

  • 求交集

  • 键值互换

如果放在 Java 里,当然也能做,但 Python 往往几行代码就能把核心逻辑表达清楚。

这对以后做 AI 应用开发会很有帮助。

因为 AI 工程里,除了模型本身,很多时候其实都在做这些事:

  • 处理文本数据

  • 整理结构化结果

  • 对结果做去重

  • 对字段做映射转换

  • 对内容做过滤和聚合

而这些,恰恰都离不开今天学的数据结构。


十三、最后

今天是学习 AI 的第三天。

我开始接触 Python 里的 元组、集合、字典,也做了 3 道很有代表性的练习题:

  • 列表去重

  • 求两个字符串中的公共字符个数

  • 字典键值互换

这些题不难,但它们让我开始真正感受到:

写程序,不只是写逻辑,更是在选择合适的数据结构。

这一步,看起来比前两天更偏“基础”,但我反而觉得,它非常重要。

因为程序越往后写,就越会发现:

很多时候,问题能不能优雅地解决,关键不在于你会不会写很多代码,而在于你有没有用对那个最合适的数据结构。

第三天,继续向前。

如果你也在关注AI,或者你也是传统开发者,也在思考接下来该怎么走,欢迎关注我。接下来,我们一起边学,边做,边进化。

最新文章

随机文章