Python中如何按指定前缀匹配将文件名列表拆分为分组子列表
Python文件名按前缀分组实现方案
核心思路
所有需要匹配的前缀均为_col字段之前的字符串片段,直接以此作为分组key即可。
方案1:基于itertools.groupby的极简实现
仅需3行核心代码,无冗余逻辑:
from itertools import groupby names = ['REGION_5_64_5_col1_row1_B1.tiff', 'REGION_5_64_5_col2_row2_B1.tiff', 'REGION_5_1_2_col_row_B1.tiff','REGION_5_8_3_col_row_B1.tiff'] # 分组逻辑 key_fn = lambda x: x.split('_col')[0] result = [list(g) for _, g in groupby(sorted(names, key=key_fn), key=key_fn)]
- 如果原始列表中相同前缀的文件名已经连续排列,可去掉
sorted步骤,直接改为groupby(names, key=key_fn),性能更高。
方案2:基于defaultdict的高性能实现
仅遍历列表1次,时间复杂度O(n),适合大列表场景:
from collections import defaultdict names = ['REGION_5_64_5_col1_row1_B1.tiff', 'REGION_5_64_5_col2_row2_B1.tiff', 'REGION_5_1_2_col_row_B1.tiff','REGION_5_8_3_col_row_B1.tiff'] # 分组逻辑 group_map = defaultdict(list) for name in names: group_map[name.split('_col')[0]].append(name) result = list(group_map.values())
两种方案运行后result的输出均符合要求:
[ ['REGION_5_64_5_col1_row1_B1.tiff', 'REGION_5_64_5_col2_row2_B1.tiff'], ['REGION_5_1_2_col_row_B1.tiff'], ['REGION_5_8_3_col_row_B1.tiff'] ]
内容的提问来源于stack exchange,提问作者user1298426
相关产品推荐
相关产品推荐

