python 中 append 函数常指内置类 list(列表)的 append()
函数,它将一个元素添加到列表的尾部。
添加 item 到列表中
列表对象的 append() 方法将元素对象作为参数并将其添加到现有列表的末尾,紧随其最后一个元素之后:
>>> numbers = [1, 2, 3]
>>> numbers.append(4)
>>> numbers
[1, 2, 3, 4]
每次调用列表对象的 .append() 函数时,该方法都会在列表的末尾或右侧添加一个新 item。下图说明了该过程:
python 列表在末尾处为新元素保留额外空间。调用 .append()
将在可用空间中放置新 item。
python 列表的额外空间是在之前扩容时,提前申请下来的,在列表触发扩容操作时,列表增量是当前容量的 1/8 再加上 3 或 6,即新容量是 PY_SSIZE_T_MAX * 9/8 + 6,其中 PY_SSIZE_T_MAX 是旧容量,。
此外,值得一提的是,扩容条件:已有数据项个数 + 1 > 当前列表容量。
在实际操作中,.append()
可以将任何类型的对象添加到指定列表中:
>>> mixed = [1, 2]
>>> mixed.append(3)
>>> mixed
[1, 2, 3]
>>> mixed.append("four")
>>> mixed
[1, 2, 3, 'four']
>>> mixed.append(5.0)
>>> mixed
[1, 2, 3, 'four', 5.0]
列表可以保存不同数据类型和 Python 对象,如上示例中,首先添加一个整数,然后添加一个字符串,最后添加一个浮点数。此外,你也可以添加另一个列表、字典、元组、用户定义的对象等。
>>> x = [1, 2, 3, 4]
>>> y = (5, 6)
>>> x.append(y)
>>> x
[1, 2, 3, 4, (5, 6)]
python 列表 append 也可以使用切片技术来实现,通过切片(slice)指定追加元素,如下:
>>> numbers = [1, 2, 3]
>>> # Equivalent to numbers.append(4)
>>> numbers[len(numbers):] = [4]
>>> numbers
[1, 2, 3, 4]
也可以是批量操作:
>>> numbers = [1, 2, 3]
>>> # Equivalent to numbers.append(4)
>>> # Equivalent to numbers.append(5)
>>> numbers[len(numbers):] = [4, 5]
>>> numbers
[1, 2, 3, 4, 5]
如上批量操作,也可以用 extend()
来实现,它将可迭代对象作为参数,解包(unpack)其 item,并将它们添加到目标列表的末尾。
>>> x = [1, 2, 3, 4]
>>> y = (5, 6, 7)
>>> x.extend(y)
>>> x
[1, 2, 3, 4, 5, 6, 7]
>>> x = [1, 2, 3, 4]
>>> y = (5, 6, 7)
>>> # Equivalent to x.extend(y)
>>> x[len(x):] = y
>>> x
[1, 2, 3, 4, 5, 6, 7]
append 函数返回 None
在实际操作中,我们发现调用 append
函数其返回 None
,如下:
>>> x = [1, 2, 3, 4]
>>> y = x.append(5)
>>> y is None
True
>>> x
[1, 2, 3, 4, 5]
append 与列表推导式
使用 .append()
在 for 循环中完全填充一个空列表。在循环内部,您可以操作数据并使用 .append()
将连续结果添加到列表中。假设您需要创建一个函数,该函数接受一个数字序列并返回一个包含每个数字平方根的列表:
>>> import math
>>> def square_root(numbers):
... result = []
... for number in numbers:
... result.append(math.sqrt(number))
... return result
...
>>> numbers = [1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> square_root(numbers)
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
定义 square_root()
,它将列表 numbers
作为参数。在 square_root()
函数内部创建一个名为 result
的空列表,并开始 for
循环遍历 numbers
。在每次迭代中,使用 math.sqrt()
计算当前数字的平方根,然后使用 .append()
将结果添加到 result
中。循环完成后,将返回结果列表。
这种填充列表的方式在 Python 中相当普遍。但是,不够 Pythonic,也不高效。Python 中提供了一个列表推导式(list comprehension),具体请看下面内容。
使用列表推导式可以将 square_root()
重新实现,具体如下:
>>> import math
>>> def square_root(numbers):
... return [math.sqrt(number) for number in numbers]
...
>>> numbers = [1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> square_root(numbers)
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]
这种新的实现在性能方面比上一个更高效。