python 中的 extend 是列表 list 自带的内置方法,核心作用是把一个可迭代对象里面的全部元素逐个拆开,追加到原列表末尾,原地修改原来的列表,不会返回新列表,之所以学习这个方法,是因为在批量合并数据循环收集多组结果爬虫汇总数据的时候,经常需要把多个序列合并到同一个列表,如果使用 append 会生成嵌套列表,而 extend 可以平铺展开元素,得到扁平化的列表,使用的时候先准备已经定义好的列表,调用列表点 extend,括号里面填入可迭代对象,可以是列表元组字符串集合,执行之后原列表长度增加,新增的就是可迭代对象里面每一项元素,这个方法只属于可变列表,元组字典集合没有这个同名 extend 方法,学习的时候重点区分 extend 和 append 的差异,理解原地修改无返回值的特性,避免赋值之后拿到 None 的经典报错。
基础语法与执行逻辑
基础写法 列表名.extend (可迭代对象)
1 括号内参数必须是可迭代对象,也就是可以循环遍历的数据,常见的有列表元组集合字符串生成器
2 执行之后原列表直接改动,元素追加在末尾,返回值为 None,这点和 append 保持一致
3 字符串作为参数的时候,extend 会把每一个字符单独拆分追加,这个是新手很容易忽略的细节
4 不会创建全新列表对象,变量仍然指向原来的内存地址,属于原地扩充
核心特性深度讲解
1 平铺展开追加
extend 会遍历传入对象,把里面每一个元素依次放进原列表,不会把整个对象当成单个元素,和 append 整体追加的逻辑完全相反
2 无返回值
不能写成新列表等于原列表 extend,这样新变量会得到 None,原列表本身已经完成扩充
3 支持多种可迭代类型
传入元组会把元组元素全部追加,传入集合会把集合元素追加,集合本身无序,追加之后顺序不固定,传入生成器会消耗生成器里面全部数据
4 不会修改传入的可迭代对象
extend 只是读取参数里面的元素追加到目标列表,作为参数的原始列表元组本身不会发生任何改动
extend 和 append 对比
| 对比项 | extend | append |
|---|---|---|
| 添加逻辑 | 遍历参数,逐个元素拆开追加 | 参数作为一个整体追加 |
| 传入列表效果 | 平铺合并,无嵌套 | 生成嵌套子列表 |
| 返回值 | None | None |
| 适合场景 | 批量合并多组元素 | 单独追加单个元素 |
举例说明
原列表是 [1,2]
使用 extend ([3,4]),最终结果是 [1,2,3,4]
使用 append ([3,4]),最终结果是 [1,2,[3,4]]
典型使用场景
场景 1 多批次爬虫数据汇总,每一次循环拿到一批结果列表,使用 extend 合并到总结果列表,保持扁平化结构
场景 2 循环累加多组计算结果,把每一轮生成的序列全部合并进主列表
场景 3 合并元组集合里面的数据,不需要提前转换成列表,直接交给 extend 处理
常见踩坑点
1 错误把 extend 赋值给新变量,变量得到 None,后续代码读取数据报错
2 传入参数不是可迭代对象,比如传入整数,程序会抛出类型错误,extend 要求参数必须可以遍历
3 对元组调用 extend,元组是不可变序列,不存在 extend 方法,调用会报属性错误
4 传入字符串的时候,extend 会拆分单个字符,如果本意是把整个字符串当成一项追加,应该改用 append
拓展补充
python 中的 extend 只属于列表,如果想要合并列表还可以使用加号运算符,加号会生成全新列表,不会修改原列表,这点和 extend 原地修改不一样。如果需要在指定位置插入一批元素,可以使用切片赋值,不要混淆 extend 末尾追加的定位,extend 固定只能添加在列表最后位置。
【常见问题】
问题 1 python 中的 extend 有没有返回值
回答 1 python 中的 extend 是原地修改列表的方法,执行之后返回 None,不能把 extend 执行结果赋值给新变量,否则会得到空值。
问题 2 python 中的 extend 和 append 最大区别是什么
回答 2 python 中的 extend 会把可迭代对象里面元素逐个拆开平铺追加,append 是把参数整体作为单个元素追加,传入列表的时候 extend 不会嵌套,append 会形成嵌套子列表。
问题 3 python 中的 extend 可以传入整数吗
回答 3 python 中的 extend 要求参数必须是可迭代对象,整数不能遍历,直接传入整数会触发类型错误,不能正常执行。
问题 4 python 中的 extend 会修改传入的参数对象吗
回答 4 python 中的 extend 只会读取参数内部元素追加到目标列表,作为参数的原始对象本身不会发生修改,仅目标列表原地变更。
【免责申明】
本文内容仅用于 python 中的 extend 相关技术科普,内容基于 Python 官方列表内置方法规范整理,代码示例仅作教学演示,不同 Python 版本该方法行为保持一致,不构成项目开发专业建议,实际编码请结合官方文档验证。


