作为刚入门的小白,理解列表的 extend() 方法确实很重要,它看起来简单,但容易和一些类似操作搞混。我来给你掰开揉碎讲清楚。
1. extend() 是干什么的?
简单说:把一个“可迭代对象”里的每一个元素,逐个追加到列表的末尾。
关键词:“拆开”、“逐个加进去”。
比如你有一个列表ls = [1,2,3],你调用 ls.extend([4,5,6]),结果就变成 [1,2,3,4,5,6]。不是把 [4,5,6] 整个当一个元素加进去,而是把里面的 4、5、6 取出来一个一个放进去。
2. 基本语法
列表.extend(可迭代对象)
- 可迭代对象:就是能一个接一个取出元素的东西,常见的有:
- 列表(list)
- 元组(tuple)
- 字符串(str)
- 集合(set)
- 字典(dict)—— 注意这里 只会取出键(key)
- 返回值:
None(没有返回值,直接修改原列表) - 效果:原列表被改变了,没有产生新列表。
3. 直观例子
先看最常用的——用另一个列表来扩展:
fruits = ['苹果', '香蕉']
more_fruits = ['橘子', '葡萄']
fruits.extend(more_fruits)
print(fruits) # 输出:['苹果', '香蕉', '橘子', '葡萄']
再试一下其他可迭代对象:
nums = [1, 2, 3]
# 用元组扩展
nums.extend((4, 5))
print(nums) # [1, 2, 3, 4, 5]
# 用字符串扩展
nums.extend('hi')
print(nums) # [1, 2, 3, 4, 5, 'h', 'i'] 注意,字符串被拆成单个字符了!
# 用集合扩展
nums.extend({6, 7})
print(nums) # [1, 2, 3, 4, 5, 'h', 'i', 6, 7] (集合无序,6和7的顺序可能不同)
# 用字典扩展
nums.extend({'a': 1, 'b': 2})
print(nums) # [1, 2, 3, 4, 5, 'h', 'i', 6, 7, 'a', 'b'] 只加了键 'a' 和 'b'
可以看到,extend() 总会把参数掰开,再把里面每一个元素放进去。
4. 容易踩的坑(重点!)
① 不能传整数、浮点数等不可迭代对象
lst = [1,2,3]
lst.extend(4) # ❌ TypeError: 'int' object is not iterable
因为数字 4 不是一个可以取出一串元素的东西,所以会报错。想单独加一个数字,用 append。
② extend() 返回的是 None,不要给它赋值
这是初学者常犯的错误:
a = [1,2,3]
a = a.extend([4,5]) # ❌ 这样 a 会变成 None
print(a) # None
正确写法:直接调用,不要重新赋值。
a = [1,2,3]
a.extend([4,5])
print(a) # [1, 2, 3, 4, 5]
③ 字符串被拆成单个字符
这可能不是你想要的。如果你想把整个字符串当成一个元素加进去,应该用 append,而不是 extend。
words = ['hello']
words.extend(' world') # 结果:['hello', ' ', 'w', 'o', 'r', 'l', 'd'] ❌
words = ['hello']
words.append(' world') # 结果:['hello', ' world'] ✅
5. extend vs append(最重要的一张对比图)
| 操作 | 效果 |
|---|---|
列表.append( x ) | 把 x 当做一个整体,加到列表末尾 |
列表.extend( x ) | 把 x 拆开,将其中的每一个元素逐个加到末尾 |
lst1 = [1,2,3]
lst1.append([4,5])
print(lst1) # [1, 2, 3, [4, 5]] → 整个列表当成了一个元素
lst2 = [1,2,3]
lst2.extend([4,5])
print(lst2) # [1, 2, 3, 4, 5] → 拆开,加了4和5
6. extend 和 + 运算符的区别
+ 也能合并列表,但会创建一个全新的列表,原列表不变:
a = [1,2,3]
b = a + [4,5]
print(a) # [1, 2, 3] 原列表没变
print(b) # [1, 2, 3, 4, 5]
extend 直接修改原列表,不会创建新对象,在处理大量数据时更省内存:
a = [1,2,3]
a.extend([4,5])
print(a) # [1, 2, 3, 4, 5] a 本身变了
7. 什么时候用 extend?
- 想把两个列表的内容无缝拼成一个列表。
- 想批量添加很多元素到已有列表,但又不想用循环一个个
append(因为extend更快)。 - 合并来自不同来源的同类型数据,比如读取两个文件的所有行、拼接查询结果等。
# 不用 extend,你可能会这样写(低效):
for item in another_list:
my_list.append(item)
# 用 extend 一行搞定:
my_list.extend(another_list)
8. 小总结
extend(iterable):把参数里的每个元素 拆开加进去。- 参数必须是可迭代对象(列表、元组、字符串等)。
- 原地修改列表,返回
None。 - 相比
append:append加整体,extend加元素。 - 相比
+:+创建新列表,extend修改原列表(更省内存)。 - 注意字符串会被拆成字符,字典只加键。
未经允许不得转载:445IT之家 » python列表的extend()函数用法详解
