我敢说,每个刚摸索Python的人,第一个遇到的“拦路虎”八成不是什么高深的算法,而是这个基础得不能再基础的问题:我创建了一个空列表,然后呢?我怎么把数据塞进去?
你可能对着屏幕上的 my_list = []
发呆,心里琢磨着,这就像一个空荡荡的购物车,我怎么把我选好的商品,一个一个地扔进去?
答案,简单到让你想拍大腿。就一个动作:.append()。
append 是个啥?它就是你的魔法棒
想象一下,你在排一个很长的队。append()
就是一个新来的人,非常守规矩地站到队伍的 最后面。它不会插队,也不会把队伍搞乱,就是安安静静地在末尾追加一个新成员。
在Python的世界里,列表(List) 就是那条队伍,而 append()
就是那个往队尾加人的动作。它是一个专属于列表的方法(method),记住,是“方法”,不是一个独立的函数。这意味着你必须通过一个列表实例来调用它,像这样:
你的列表.append(你要添加的东西)
举个最直观的例子:
“`python
先来个空荡荡的购物车
shopping_cart = []
开始购物!
shopping_cart.append(“一瓶冰可乐”)
shopping_cart.append(“一大包薯片”)
shopping_cart.append(“那本想了很久的编程书”)
看看购物车里都有啥
print(shopping_cart)
输出: [‘一瓶冰可乐’, ‘一大包薯片’, ‘那本想了很久的编程书’]
“`
看到了吗?每 append()
一次,列表的末尾就多了一个新成员。这个过程,我们行话叫 “原地修改”(in-place modification),意思就是它直接在原始列表上动刀子,而不是创建一个新的列表。这一点,极其重要,后面我们会讲它埋着一个多大的坑。
append 的肚量有多大?啥都能往里装
Python最迷人的地方之一就是它的灵活性。append()
完美继承了这一点。你甭管要添加的是什么牛鬼神蛇,是数字、是字符串、是另一个列表、甚至是一个字典,它都照单全收,一口吞下。
“`python
创建一个混搭列表
mixed_bag = []
添加一个整数
mixed_bag.append(1024)
添加一个字符串
mixed_bag.append(“Hello, append!”)
重点来了:添加一整个列表
mixed_bag.append([1, 2, 3])
再来个字典试试
mixed_bag.append({‘name’: ‘小明’, ‘age’: 18})
print(mixed_bag)
输出: [1024, ‘Hello, append!’, [1, 2, 3], {‘name’: ‘小明’, ‘age’: 18}]
“`
注意看输出结果的第三个元素 [1, 2, 3]
。append()
把这个列表 作为一个整体 塞了进去,它才不管里面是啥,在它眼里,[1, 2, 3]
就是一个独立的、完整的“东西”。
那个能让无数英雄好汉折腰的惊天巨坑
好了,现在到了揭露真相的时刻。几乎所有新手,包括当年的我,都在这里栽过跟头。
很多人会下意识地这么写:
“`python
错误示范!错误示范!错误示范!
my_list = [1, 2, 3]
new_list = my_list.append(4)
print(my_list) # 这行没问题
print(new_list) # 问题大了!
“`
你猜 new_list
会是啥?是 [1, 2, 3, 4]
吗?
大错特错!
你会得到一个让你怀疑人生的结果:None
。
为什么?回到我们前面说的那个关键词:“原地修改”。append()
这个方法,它的工作是直接修改 my_list
本身,它的任务完成了,就潇洒地走人,不返回任何有意义的东西,所以它的返回值就是 None
。你把一个 None
赋值给了 new_list
,结果自然就是 None
。
正确的做法是,如果你想在原来的列表上追加,直接调用方法就行了,别用变量去接它的返回值。
“`python
正确的姿势
my_list = [1, 2, 3]
my_list.append(4) # 直接操作,别画蛇添足
print(my_list)
输出: [1, 2, 3, 4]
“`
这个坑,真的,谁踩谁知道。你调试半天,发现一个变量莫名其妙变成了 None
,很可能就是因为这个不起眼的 append()
。
append() vs +
vs extend()
:别再傻傻分不清
讲到添加元素,就不得不提它的两个兄弟:加号 +
(列表拼接)和 extend()
方法。这三者在某些场景下看起来很像,但骨子里完全不同。
append()
:追加一个元素。不管这个元素是什么,哪怕是个列表,也只把它当成一个整体。就像往箱子里放一个“工具盒”。+
(拼接):创建一个全新的列表。它会把两个列表的所有元素拿出来,放进一个新创建的、更大的列表里。这非常消耗内存,尤其是在循环里大量使用时,性能会急剧下降。这好比你有两个书架的书,你买了个更大的新书架,然后把所有书都搬过去。extend()
:扩展列表。它会接收一个可迭代对象(比如列表、元组),然后把这个对象里的 每一个元素 拿出来,逐一添加到原列表的末尾。就像你打开那个“工具盒”,把里面的扳手、螺丝刀一个个摆放到箱子里。
我们用代码来感受下这三者间的“血缘差异”:
“`python
list_a = [1, 2]
list_b = [3, 4]
使用 append
list_a_appended = list_a.copy() # 复制一个,免得影响后面的演示
list_a_appended.append(list_b)
print(f”append 结果: {list_a_appended}”)
输出: append 结果: [1, 2, [3, 4]] <- 把 [3, 4] 当成了一个元素
使用 +
list_a_plus = list_a + list_b
print(f”+ 结果: {list_a_plus}”)
输出: + 结果: [1, 2, 3, 4] <- 创建了一个新列表
print(f”原始 list_a 没变: {list_a}”)
使用 extend
list_a_extended = list_a.copy()
list_a_extended.extend(list_b)
print(f”extend 结果: {list_a_extended}”)
输出: extend 结果: [1, 2, 3, 4] <- 把 [3, 4] 拆开加进去
“`
总结一下,什么时候用哪个?
- 当你只想往列表末尾加 一个 东西时,毫不犹豫,用
append()
。它高效、直接。 - 当你需要把一个列表里的 所有元素 都加到另一个列表末尾时,用
extend()
。 - 除非你明确需要一个全新的合并列表,并且不关心性能开销,否则尽量 少用
+
来进行循环追加。
python怎么使用append
这个问题,看似只是一个简单API的用法,但深究下去,它关联着原地操作、函数返回值、数据结构性能等多个核心概念。掌握它,不仅仅是学会了一个方法,更是你开始理解Python这门语言设计哲学的一小步。从这个小小的 append()
开始,你会发现,代码的世界,远比你想象的要深邃和有趣。
评论(0)