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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:48:18