你好!欢迎来到 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' 呢?分两步走:
用
L[1]打开第二个抽屉。再从这个抽屉里拿出第二个东西(编号为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章:终极对决 - 全面对比总结
恭喜你!你已经掌握了 Python 中最核心的两个数据结构。理解了它们之间的区别,你的编程之路将会顺畅很多。现在,再回头看看最初的那段代码,是不是感觉像老朋友一样亲切了呢?