LEONE
发布于 2025-09-06 / 1 阅读
0
0

Python 入门:从零开始彻底搞懂列表(List)与元组(Tuple)

你好!欢迎来到 Python 的世界。如果你是第一次接触编程,别担心,我们会用最简单的方式来理解它。今天,我们将一起探索 Python 中两种最基础、也最重要的数据“容器”:列表(List)元组(Tuple)

第1章:冒险开始 - 认识我们的第一段代码

让我们从你最初遇到的这段代码开始:

L = [
    ['Apple', 'Google', 'Microsoft'],
    ['Java', 'Python', 'Ruby', 'PHP'],
    ['Adam', 'Bart', 'Bob']
]

初看可能有点吓人,但我们把它想象成一个带抽屉的储物柜,一切就简单了。

  • L 就是这个储物柜的名字。

  • 最外层的 [ ] 方括号,在 Python 里代表“列表(List)”。你可以把列表想象成一张可以随时涂改的购物清单

  • 所以,L 是一个大清单,里面装着 3 个小清单(三个抽屉)。

简单说,L 就是一个装了 3 个小列表的大列表,这种结构也叫“嵌套列表”。

怎么从储物柜里拿东西呢?(索引)

电脑和我们数数的方式有点不一样,它喜欢从 0 开始

  • 想拿出第一个抽屉(['Apple', 'Google', 'Microsoft'])?用 L[0]

  • 想拿出第二个抽屉?用 L[1]

那如果想拿出第二个抽屉里的 'Python' 呢?分两步走:

  1. L[1] 打开第二个抽屉。

  2. 再从这个抽屉里拿出第二个东西(编号为1)。

合在一起就是 L[1][1],我们就能精准定位到 'Python' 了!

第2章:两位主角登场 - 列表(List) vs 元组(Tuple)

Python 世界里,列表(List)有一个长得很像的兄弟,叫元组(Tuple)。它们是处理一组数据的两种最主要的方式,但性格截然不同。

主角A:列表 List - 灵活的魔法师

  • 标志:方括号 [ ]

  • 性格可变的 (Mutable),像一团可以随意揉捏的橡皮泥。

  • 超能力:创建后,你可以对它为所欲为。

    • 添加新成员: shopping_list.append('鸡蛋')

    • 踢出旧成员: shopping_list.pop(0)

    • 替换某个成员: shopping_list[0] = '酸奶'

  • 口头禅:“一切皆可改变!”

主角B:元组 Tuple - 忠诚的守护者

  • 标志:圆括号 ( )

  • 性格不可变的 (Immutable),像一块刻上了字的石板。

  • 超能力:一旦被创造出来,就永远、永远无法被修改。任何想改变它的尝试都会失败(程序会报错 TypeError)。

  • 口头禅:“我发誓,永不改变!”

思考一下: 如果你要记录你的GPS坐标,这个坐标一旦确定就不应该变了,你觉得用列表还是元组更合适呢?(答案是元组,因为它更安全!)

第3章:深入探索 - 它们的更多秘密

秘密1:“套娃”现象 (嵌套)

  • 列表可以套娃吗? 当然!我们一开始的 L 就是一个列表套列表的例子。

  • 元组可以套娃吗? 也完全可以!元组里面可以放任何东西,包括另一个元组或列表。

    # 元组套元组
    user_data = ( ('Adam', 30), ('Bob', 42) )
    ​
    # 元组套列表
    file_info = ('document.txt', ['read', 'write'])

秘密2:元组的“伪装” - 一个重要的陷阱

这是最容易让人迷惑的地方:

元组本身不可变,但如果它内部的某个成员是可变的列表,那么这个列表内部的数据是可以被修改的

用个比喻: 元组就像一个被焊死的玻璃保险箱。你不能替换里面的任何东西。 但是,如果保险箱里放了一个没锁盖子的罐子(列表),你虽然拿不出罐子,但可以伸手进去修改罐子里的东西!

# T 是一个焊死的保险箱,里面有个没锁的罐子 [1, 2, 3]
T = ('user', [1, 2, 3])
​
# 错误!你不能把罐子换成别的东西
# T[1] = [4, 5, 6]  # 这会直接报错!
​
# 正确!你可以修改罐子里面的东西
T[1].append(4)
​
# 查看保险箱,里面的罐子内容变了!
print(T)  # 输出: ('user', [1, 2, 3, 4])

第4章:终极对决 - 全面对比总结

特性

列表 (List)

元组 (Tuple)

性格

可变的 (Mutable) - 灵活善变

不可变的 (Immutable) - 忠诚可靠

外貌

方括号 [ ]

圆括号 ()

能力

增(append), 删(pop), 改([i]=v)等

只有查(count, index)

速度

相对稍慢,占用内存稍多

相对稍快,占用内存稍少

什么时候用?

需要动态变化的集合,如:购物车、待办事项。

需要保护、不希望被改变的数据,如:坐标、配置、字典的键。


恭喜你!你已经掌握了 Python 中最核心的两个数据结构。理解了它们之间的区别,你的编程之路将会顺畅很多。现在,再回头看看最初的那段代码,是不是感觉像老朋友一样亲切了呢?


评论