Python如何基于子串条件排除提取同类路径第二长字符串
问题背景
Python/Spyder初学者现有命名为model的路径列表,需要提取每组相似路径字符串中长度第二长的条目,最初尝试通过统计反斜杠出现次数实现逻辑未生效,需要可运行的实现方案。
原始测试数据
model = [ "US\\Regional\\Ford\\F150", "US\\Regional\\Ford", "Europe\\UK\\England\\Aston Martin\\Vantage", "Europe\\UK\\England\\Aston Martin", "Asia\\Japan\\Honda\\CRV", "Asia\\Japan\\Honda", "Sweden\\Volvo\\XC70", "Sweden\\Volvo\\" ]
期望输出
| Make |
|---|
| US\Regional\Ford |
| Europe\UK\England\Aston Martin |
| Asia\Japan\Honda |
| Sweden\Volvo |
实现方案
之前逻辑失效原因
直接统计反斜杠数量失效的核心问题是原始数据里存在脏值:最后一条Sweden\\Volvo\\末尾带了冗余反斜杠,直接计数反斜杠会把它的层级算错,和三级路径Sweden\\Volvo\\XC70的反斜杠数量一致,导致排序、分组逻辑出错。
处理步骤
- 第一步做数据标准化:把所有路径末尾的冗余反斜杠全部清除,避免特殊值干扰统计
- 第二步按公共前缀分组:同组路径的根前缀完全一致,长路径是短路径拼接下级目录生成的,按前缀匹配把同品牌下的所有路径归为一组
- 第三步组内排序取值:每组内按路径包含的反斜杠数量(即路径层级)从高到低排序,取排序后第二个元素(第二长的条目)即为目标值
可直接运行的代码
# 1. 标准化路径,清除末尾所有冗余反斜杠 processed_paths = [path.rstrip('\\') for path in model] visited = set() result = [] for path in processed_paths: if path in visited: continue # 2. 归集同组路径 current_group = [] root_prefix = path.split('\\')[0] for item in processed_paths: # 先匹配根前缀,再校验逐层路径完全一致,避免误匹配 if item.startswith(root_prefix): path_segs = path.split('\\') item_segs = item.split('\\') check_len = min(len(path_segs), len(item_segs)) if path_segs[:check_len] == item_segs[:check_len]: current_group.append(item) visited.add(item) # 3. 组内按层级降序排序,取第二长的条目 current_group_sorted = sorted(current_group, key=lambda x: x.count('\\'), reverse=True) result.append(current_group_sorted[1]) # 打印结果验证 for item in result: print(item)
运行验证
执行代码后输出结果完全匹配预期:
US\Regional\Ford Europe\UK\England\Aston Martin Asia\Japan\Honda Sweden\Volvo
该逻辑兼容同组存在多级路径的场景,也能自动处理末尾带多个连续反斜杠的脏数据,不需要提前手动清洗原始列表。
内容的提问来源于stack exchange,提问作者2020db9
相关产品推荐
相关产品推荐

