You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中用列表推导结合模式匹配实现列表元素分组

问题描述

现有一个名为columns的列表,需要根据元素的前三个部分拆分后进行分组,生成嵌套列表。例如,元素'101 Drive 1 A'需按'101 Drive 1'进行分组。

示例输入列表:

columns = ['101 Drive 1 A','101 Drive 1 B','102 Drive 2 A','102 Drive 2 B','102 Drive 2 C','103 Drive 1 A']

期望输出嵌套列表:

[
  ['101 Drive 1 A', '101 Drive 1 B'],
  ['102 Drive 2 A', '102 Drive 2 B', '102 Drive 2 C'],
  ['103 Drive 1 A']
]

要求使用Python的列表推导结合模式匹配完成需求。


解决方案

我们可以用Python 3.10+支持的结构模式匹配(match-case语法)提取分组键,先通过字典完成分组,最后用列表推导生成目标嵌套列表。

代码实现:

columns = ['101 Drive 1 A','101 Drive 1 B','102 Drive 2 A','102 Drive 2 B','102 Drive 2 C','103 Drive 1 A']

# 用字典存储分组,键为前三个部分组成的字符串
groups = {}
for col in columns:
    parts = col.split()
    match parts:
        # 匹配包含4个及以上部分的元素,取前三个作为分组键
        case [a, b, c, *_]:
            key = f"{a} {b} {c}"
        # 处理刚好只有三个部分的元素
        case [a, b, c]:
            key = f"{a} {b} {c}"
        # 兜底处理其他格式的元素(直接用原字符串作为键)
        case _:
            key = col
    # 把元素追加到对应分组的列表中
    groups.setdefault(key, []).append(col)

# 用列表推导提取所有分组,生成最终结果
result = [group for group in groups.values()]

print(result)

代码说明

  1. 分组键提取:通过split()将元素拆分为单词列表,用match-case匹配列表结构,精准提取前三个单词作为分组标识;
  2. 字典分组:借助dict.setdefault()方法自动为新键创建空列表,避免手动判断键是否存在;
  3. 列表推导生成结果:直接提取字典中的所有分组列表,组成符合要求的嵌套结构。

运行代码后输出与示例完全一致。

内容的提问来源于stack exchange,提问作者sizo_abe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:35:12