杰瑞科技汇

Python的list append如何高效使用?

核心概念

list.append() 是 Python 列表(list)的一个方法,用于在列表的末尾添加一个元素。

Python的list append如何高效使用?-图1
(图片来源网络,侵删)

这是一个非常基础且常用的操作,几乎所有的 Python 程序员都会频繁使用它。


语法

list.append(element)
  • list: 你要操作的列表。
  • element: 你要添加到列表末尾的元素,这个元素可以是任何数据类型,比如数字、字符串、另一个列表、字典,甚至是自定义的对象。

重要提示:

  • append() 方法原地修改(in-place modify)列表,也就是说,它直接改变了原始列表,而不是创建一个新列表。
  • 不返回任何值(返回 None),这是一个非常容易混淆的新手错误点。

基本用法示例

示例 1:添加单个元素

# 创建一个空列表
my_list = []
print(f"初始列表: {my_list}")
# 添加一个整数
my_list.append(10)
print(f"添加 10 后: {my_list}")
# 添加一个字符串
my_list.append("hello")
print(f"添加 'hello' 后: {my_list}")
# 添加一个布尔值
my_list.append(True)
print(f"添加 True 后: {my_list}")

输出:

初始列表: []
添加 10 后: [10]
添加 'hello' 后: [10, 'hello']
添加 True 后: [10, 'hello', True]

示例 2:添加不同类型的元素

列表可以容纳混合类型的元素。

Python的list append如何高效使用?-图2
(图片来源网络,侵删)
mixed_list = [1, 2, 3]
print(f"原始列表: {mixed_list}")
# 添加一个浮点数
mixed_list.append(4.5)
print(f"添加 4.5 后: {mixed_list}")
# 添加另一个列表(嵌套列表)
mixed_list.append([5, 6, 7])
print(f"添加 [5, 6, 7] 后: {mixed_list}")

输出:

原始列表: [1, 2, 3]
添加 4.5 后: [1, 2, 3, 4.5]
添加 [5, 6, 7] 后: [1, 2, 3, 4.5, [5, 6, 7]]

常见错误:append() 的返回值

这是一个非常经典的错误,很多初学者会尝试将 append() 的结果赋值给另一个变量。

my_list = [1, 2, 3]
# 错误的做法
new_list = my_list.append(4)
print(f"my_list 的值: {my_list}")
print(f"new_list 的值: {new_list}")

输出:

my_list 的值: [1, 2, 3, 4]
new_list 的值: None

解释:

  • my_list.append(4) 这行代码成功地修改了 my_list,使其末尾添加了 4
  • append() 方法本身返回的是 Nonenew_list 被赋值为 None
  • 永远不要将 append() 的结果赋值给一个变量。

append() vs. 运算符

append() 和使用 运算符来连接列表是不同的,理解它们的区别很重要。

特性 list.append(element) list + list (列表连接)
操作 原地修改列表。 创建一个的列表,不修改原列表。
参数 只能添加一个元素 只能连接一个列表
效率 通常更高效,尤其是在循环中。 每次连接都会创建一个新列表,在循环中效率较低。
返回值 返回 None 返回一个新的列表。

示例对比

# --- append() 示例 ---
list1 = [1, 2]
print(f"append 前 list1 的内存地址: {id(list1)}")
list1.append(3)
print(f"append 后 list1: {list1}")
print(f"append 后 list1 的内存地址: {id(list1)}") # 地址没变
print("-" * 20)
# --- + 运算符示例 ---
list2 = [1, 2]
print(f"+" 前 list2 的内存地址: {id(list2)}")
list2 = list2 + [3]  # 注意:这里必须将结果重新赋值给 list2
print(f"+" 后 list2: {list2}")
print(f"+" 后 list2 的内存地址: {id(list2)}") # 地址变了

输出:

append 前 list1 的内存地址: 140233456123776
append 后 list1: [1, 2, 3]
append 后 list1 的内存地址: 140233456123776
--------------------
+ 前 list2 的内存地址: 140233456124608
+ 后 list2: [1, 2, 3]
+ 后 list2 的内存地址: 140233456125312

在循环中的巨大性能差异:

假设你想将一个列表中的所有元素添加到另一个列表中。

# 低效的方式:使用 + 在循环中
to_add = [i for i in range(1000)]
result_loop_plus = []
for item in to_add:
    result_loop_plus = result_loop_plus + [item] # 每次循环都创建一个新列表
# 高效的方式:使用 append 在循环中
result_loop_append = []
for item in to_add:
    result_loop_append.append(item) # 原地修改,效率高

在循环中使用 append() 的性能远高于使用 ,因为 每次都会复制整个列表。


在循环中使用 append()

append() 在循环中非常常见,用于动态构建列表。

场景: 将一个字符串列表中所有长度大于 3 的单词筛选出来。

words = ["apple", "cat", "banana", "dog", "elephant"]
long_words = []
for word in words:
    if len(word) > 3:
        long_words.append(word)
print(f"原始单词列表: {words}")
print(f"筛选后的长单词列表: {long_words}")

输出:

原始单词列表: ['apple', 'cat', 'banana', 'dog', 'elephant']
筛选后的长单词列表: ['apple', 'banana', 'elephant']

相关方法:insert()extend()

除了 append(),列表还有两个相关的插入方法,功能不同。

insert(index, element)

在列表的指定位置插入一个元素。

my_list = ['a', 'b', 'c', 'd']
print(f"原始列表: {my_list}")
# 在索引 1 的位置插入 'x'
my_list.insert(1, 'x')
print(f"insert(1, 'x') 后: {my_list}")
# 在列表开头插入 'start'
my_list.insert(0, 'start')
print(f"insert(0, 'start') 后: {my_list}")

输出:

原始列表: ['a', 'b', 'c', 'd']
insert(1, 'x') 后: ['a', 'x', 'b', 'c', 'd']
insert(0, 'start') 后: ['start', 'a', 'x', 'b', 'c', 'd']

extend(iterable)

在列表的末尾一次性添加多个元素(即扩展列表),参数必须是一个可迭代对象(如列表、元组、集合等)。

my_list = [1, 2, 3]
print(f"原始列表: {my_list}")
# 添加一个列表中的所有元素
my_list.extend([4, 5, 6])
print(f"extend([4, 5, 6]) 后: {my_list}")
# 也可以用一个元组来扩展
my_list.extend((7, 8))
print(f"extend((7, 8)) 后: {my_list}")

输出:

原始列表: [1, 2, 3]
extend([4, 5, 6]) 后: [1, 2, 3, 4, 5, 6]
extend((7, 8)) 后: [1, 2, 3, 4, 5, 6, 7, 8]

append() vs extend() 的区别:

list_a = [1, 2]
list_b = [3, 4]
# append: 将 list_b 作为一个整体元素添加
list_a.append(list_b)
print(f"append 结果: {list_a}") # 输出: [1, 2, [3, 4]]
# extend: 将 list_b 中的每个元素分别添加
list_a = [1, 2] # 重置 list_a
list_a.extend(list_b)
print(f"extend 结果: {list_a}") # 输出: [1, 2, 3, 4]

方法 功能 位置 参数 是否原地修改
append() 在末尾添加一个元素 末尾 单个元素
insert() 在指定位置插入一个元素 任意位置 index, element
extend() 在末尾添加多个元素 末尾 可迭代对象 (如 list, tuple)

append() 的核心特点:

  1. 原地修改:直接改变原列表。
  2. 添加单个元素
  3. 返回 None

掌握了 append(),你就掌握了 Python 列表动态构建的基石。

分享:
扫描分享到社交APP
上一篇
下一篇