我敢说,每个刚摸索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() 开始,你会发现,代码的世界,远比你想象的要深邃和有趣。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。