extend 是 Python 列表内置方法,核心作用是把一个可迭代对象里面的所有元素,逐个追加到原列表末尾,是原地修改列表,没有返回值,也就是执行之后原来的列表直接变长,不会生成新列表,这点是它和加号拼接 还有 append 方法最核心的区别,很多初学者经常混淆 extend 和 append,append 是把整个对象当成单个元素塞进去,extend 是拆开里面所有元素依次添加,extend 可以接收元组 字符串 集合 生成器等各类可迭代对象,在数据处理 批量合并列表场景使用频率非常高。之所以这个方法设计成原地修改,是为了节省内存,大批量合并数据的时候不用额外创建新列表,但是原地修改这个特性也带来副作用,如果多个变量引用同一个列表,调用 extend 之后所有引用对应的列表都会同步变化,这个坑在项目开发里很常见。学习 extend 函数用法的时候,可以先掌握基础语法,对比 append 加号 切片赋值这些相似写法,再学习嵌套合并 生成器传入 异常场景,最后记住常见报错和坑点,写代码的时候就可以根据需求选择正确方法,不会把 extend 和其他合并方式混用。
一 基础语法
语法格式 列表名 extend 可迭代对象
基础示例
a = [1,2,3]
b = [4,5,6]
a.extend (b)
执行之后 a 变成 [1,2,3,4,5,6]
注意 extend 没有返回值,不能写成 c = a.extend (b),这样 c 得到的是 None
二 可传入的可迭代对象类型表格
| 传入对象类型 | 执行效果 | 注意事项 |
|---|---|---|
| 列表 | 把列表全部元素追加到原列表末尾 | 最常用场景 |
| 元组 | 拆解元组元素追加 | 元组本身不会转成列表,只是取出元素 |
| 字符串 | 逐个字符追加进列表 | 容易踩坑,会拆成单个字符 |
| 集合 | 追加集合全部元素 | 集合无序,追加之后顺序不固定 |
| 生成器 | 遍历生成器所有元素追加 | 生成器消耗完之后不能重复使用 |
三 extend 和相似方法对比
1 extend 原地扩展,拆解可迭代对象全部元素,无返回值
2 append 原地追加,把传入对象作为单个元素,不拆解
3 加号 + 拼接,生成全新列表,原列表保持不变
4 切片赋值 列表名 [len 列表名:] = 可迭代对象,效果和 extend 一致,原地修改
举例子区分
a = [1,2]
a.append ([3,4]) 结果 [1,2,[3,4]]
a.extend ([3,4]) 结果 [1,2,3,4]
四 进阶用法
1 批量合并多个列表,循环调用 extend
list1 = []
for sub in list_group:
list1.extend (sub)
这种写法适合多层嵌套列表扁平化第一层,注意它只能拆一层,深层嵌套不会自动展开
2 传入生成器表达式
data = [1,2,3]
data.extend (x2 for x in range (3))
适合大数据场景,不用提前创建完整临时列表,节省内存
3 配合其他内置函数,比如 extend (map 函数返回的迭代器)
五 常见报错与坑点
1 传入非可迭代对象,比如整数数字,会抛出 TypeError,extend 要求参数必须是可迭代对象,不能直接传单个数字,如果想加单个元素要用 append
2 误以为 extend 有返回值,赋值之后拿到 None,后续代码报错
3 原地修改副作用,多个变量指向同一个列表,extend 之后全部同步改变,如果不想改动原列表,要先复制一份再调用 extend
4 传入字符串的时候自动拆成字符,很多人本意是把整个字符串作为一个元素,这个时候应该改用 append
掌握 extend 函数用法,核心记住它是原地拆解追加,和 append 的单元素追加区分开,理解它无返回值这个关键点,同时记住它只支持可迭代对象,大数据批量合并优先选用 extend,相比加号拼接内存效率更高。
【常见问题】
问题 1 extend 函数用法里 extend 和 append 最大区别是什么
回答 1 extend 函数用法核心特点是拆解可迭代对象,把里面全部元素逐个追加,append 是把传入对象整体当成单个元素追加,extend 原地修改没有返回值,append 同样原地修改,但是不会拆解内部元素。
问题 2 extend 函数用法能不能传入数字
回答 2 extend 函数用法要求参数必须是可迭代对象,不能直接传入单个数字,直接传整数会触发类型报错,如果需要添加单个数字,应该改用 append 方法。
问题 3 extend 函数用法执行之后会不会生成新列表
回答 2 extend 函数用法属于原地修改,执行之后直接修改原本的列表,不会创建新列表,也没有返回值,如果需要生成新列表,应该使用加号拼接或者列表推导式。
【免责申明】
本内容仅作为 Python 学习参考总结,代码示例为教学演示,语法规则以 Python 官方版本文档为准,不同 Python 版本行为可能存在细微差异,实际开发请结合官方手册核对。


