Python中列表的append和extend方法有什么区别?

下面的命令中,append 会出错,但是 extend 没有问题,请问两种方法的区别何在呢?

>>> C=bytearray(b’xYam’)

>>> C.append(b’LMN’)

TypeError: an integer is required


>>> C.extend(b’MNO’)

>>> C
bytearray(b’xYamLMNO’)
Python中列表的append和extend方法有什么区别?

4 回复

你可以理解成

[1, 2, 3].append(4) = [1, 2, 3, 4]
[1, 2, 3].append([4]) = [1, 2, 3, [4]] // 或者报错,如果是 bytes 必须要求每个元素是一个整数
[1, 2, 3].extend([4]) = [1, 2, 3, 4]
[1, 2, 3].extend([4]) = Error 因为 4 不可迭代


appendextend都是用来给列表添加元素的方法,但处理方式完全不同。

append是把传入的整个对象作为一个新元素添加到列表末尾。无论你传什么进去,它都会变成列表里的一个独立项。

extend则是把传入的可迭代对象(比如列表、元组、字符串)拆开,将其中的每个元素依次添加到列表末尾。

看代码最直接:

my_list = [1, 2, 3]

# 使用 append
my_list.append([4, 5])
print(my_list)  # 输出: [1, 2, 3, [4, 5]]  # 整个列表被当成一个元素

# 使用 extend
my_list = [1, 2, 3]  # 重置
my_list.extend([4, 5])
print(my_list)  # 输出: [1, 2, 3, 4, 5]  # 列表被拆开,元素被逐个添加

另一个例子:

lst = ['a', 'b']
lst.append('cde')      # 结果: ['a', 'b', 'cde']  字符串作为一个整体
lst = ['a', 'b']
lst.extend('cde')      # 结果: ['a', 'b', 'c', 'd', 'e']  字符串被拆成字符

简单说:append是“加一个盒子”,extend是“打开盒子加里面的东西”。根据你想加的是单个对象还是一组元素来选。

追加一个和追加一坨的区别

可以用 help(xxx) 或者 print(xxx.__doc__),示例:


$ python -c ‘print(bytearray().extend.doc)’
B.extend(iterable int) -> None

Append all the elements from the iterator or sequence to the
end of B.


$ python -c ‘print(bytearray().append.doc)’
B.append(int) -> None

Append a single item to the end of B.

回到顶部