本文目录导读:

我来详细介绍Python中合并多个列表的各种方法,配合实际案例说明。
使用 运算符(基础拼接)
# 简单合并两个列表 list1 = [1, 2, 3] list2 = [4, 5, 6] result = list1 + list2 print(result) # [1, 2, 3, 4, 5, 6] # 合并多个列表 list3 = [7, 8, 9] result = list1 + list2 + list3 print(result) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
使用 extend() 方法
# 在原列表基础上扩展 list1 = [1, 2, 3] list2 = [4, 5, 6] list1.extend(list2) print(list1) # [1, 2, 3, 4, 5, 6] # 合并多个列表(链式调用) list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = [7, 8, 9] list1.extend(list2) list1.extend(list3) print(list1) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
使用 解包运算符(推荐)
# Python 3.5+ 支持 list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = [7, 8, 9] result = [*list1, *list2, *list3] print(result) # [1, 2, 3, 4, 5, 6, 7, 8, 9] # 灵活组合 result = [0, *list1, 10, *list2, *list3, 99] print(result) # [0, 1, 2, 3, 10, 4, 5, 6, 7, 8, 9, 99]
使用 itertools.chain()
from itertools import chain list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = [7, 8, 9] # 返回迭代器,节省内存 result = list(chain(list1, list2, list3)) print(result) # [1, 2, 3, 4, 5, 6, 7, 8, 9] # 处理大量数据时使用 large_list = list(chain.from_iterable([list1, list2, list3])) print(large_list) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
使用列表推导式
list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = [7, 8, 9] # 合并多个列表 lists = [list1, list2, list3] result = [item for sublist in lists for item in sublist] print(result) # [1, 2, 3, 4, 5, 6, 7, 8, 9] # 带条件过滤 result = [item for sublist in lists for item in sublist if item > 3] print(result) # [4, 5, 6, 7, 8, 9]
使用 numpy(数值计算)
import numpy as np list1 = [1, 2, 3] list2 = [4, 5, 6] result = np.concatenate([list1, list2]) print(result) # [1 2 3 4 5 6] # 合并多个 list3 = [7, 8, 9] result = np.concatenate([list1, list2, list3]) print(result) # [1 2 3 4 5 6 7 8 9]
实战案例
案例1:合并多个数据文件列表
# 模拟从多个文件中读取的数据
file1_data = [10, 20, 30]
file2_data = [40, 50, 60]
file3_data = [70, 80, 90]
# 方法1:使用 + 运算符
all_data = file1_data + file2_data + file3_data
print(f"方法1: {all_data}")
# 方法2:使用 extend(适合循环处理)
all_data = []
for data in [file1_data, file2_data, file3_data]:
all_data.extend(data)
print(f"方法2: {all_data}")
# 方法3:使用解包(最简洁)
all_data = [*file1_data, *file2_data, *file3_data]
print(f"方法3: {all_data}")
案例2:合并并去重
list1 = [1, 2, 3, 4]
list2 = [3, 4, 5, 6]
list3 = [5, 6, 7, 8]
# 合并并去重(保持顺序)
merged = []
for num in [*list1, *list2, *list3]:
if num not in merged:
merged.append(num)
print(f"去重结果: {merged}") # [1, 2, 3, 4, 5, 6, 7, 8]
# 使用 set(不保持顺序)
unique = list(set([*list1, *list2, *list3]))
print(f"set去重: {unique}") # [1, 2, 3, 4, 5, 6, 7, 8]
案例3:列表矩阵合并
# 合并二维列表
matrix1 = [[1, 2], [3, 4]]
matrix2 = [[5, 6], [7, 8]]
# 水平拼接(增加列)
horizontal = [row1 + row2 for row1, row2 in zip(matrix1, matrix2)]
print(f"水平拼接: {horizontal}") # [[1, 2, 5, 6], [3, 4, 7, 8]]
# 垂直拼接(增加行)
vertical = matrix1 + matrix2
print(f"垂直拼接: {vertical}") # [[1, 2], [3, 4], [5, 6], [7, 8]]
性能对比
import timeit
# 创建测试数据
list1 = list(range(1000000))
list2 = list(range(1000000, 2000000))
# 测试不同方法的性能
def test_plus():
return list1 + list2
def test_extend():
result = []
result.extend(list1)
result.extend(list2)
return result
def test_unpack():
return [*list1, *list2]
def test_chain():
from itertools import chain
return list(chain(list1, list2))
# 这里不实际运行,仅示意
print("性能排名(从快到慢):")
print("1. + 运算符(最快)")
print("2. 解包运算符")
print("3. extend()")
print("4. itertools.chain()")
选择建议
| 场景 | 推荐方法 | 原因 |
|---|---|---|
| 简单合并少量列表 | 运算符 | 直观、快速 |
| 合并大量列表 | itertools.chain() |
内存效率高 |
| 需要保持代码简洁 | 解包运算符 | 语法优美 |
| 在循环中累积添加 | extend() |
原地修改,性能好 |
| 需要条件过滤 | 列表推导式 | 灵活强大 |
| 数值计算 | numpy.concatenate() |
性能最优 |
选择哪种方法取决于你的具体需求:代码可读性、性能要求、内存限制等,对于大多数日常开发,使用 运算符或 解包运算符就足够了。