如何在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)
代码说明
- 分组键提取:通过
split()将元素拆分为单词列表,用match-case匹配列表结构,精准提取前三个单词作为分组标识; - 字典分组:借助
dict.setdefault()方法自动为新键创建空列表,避免手动判断键是否存在; - 列表推导生成结果:直接提取字典中的所有分组列表,组成符合要求的嵌套结构。
运行代码后输出与示例完全一致。
内容的提问来源于stack exchange,提问作者sizo_abe
相关产品推荐
相关产品推荐

