Python列表合并案例如何拼接多列表

wen python案例 38

本文目录导读:

Python列表合并案例如何拼接多列表

  1. 使用 运算符(基础拼接)
  2. 使用 extend() 方法
  3. 使用 解包运算符(推荐)
  4. 使用 itertools.chain()
  5. 使用列表推导式
  6. 使用 numpy(数值计算)
  7. 实战案例
  8. 性能对比
  9. 选择建议

我来详细介绍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() 性能最优

选择哪种方法取决于你的具体需求:代码可读性、性能要求、内存限制等,对于大多数日常开发,使用 运算符或 解包运算符就足够了。

抱歉,评论功能暂时关闭!