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

如何用Python自动识别前缀/后缀并对列表元素分组?

解决方案

这是个很实用的自动分组需求,核心难点在于自动识别列表中重复出现的前缀/后缀模式,再基于这些模式完成元素归类。下面是完全贴合你需求的Python实现方案:

from collections import Counter

def group_by_patterns(data):
    # 步骤1:收集所有可能的前缀/后缀候选,统计出现频率
    prefix_candidates = []
    suffix_candidates = []
    
    for s in data:
        # 生成当前字符串的所有非完整前缀(长度1到len(s)-1)
        for i in range(1, len(s)):
            prefix_candidates.append(s[:i])
        # 生成当前字符串的所有非完整后缀(长度1到len(s)-1)
        for i in range(1, len(s)):
            suffix_candidates.append(s[i:])
    
    # 筛选出出现次数≥2的模式(确保分组至少有2个元素,避免无意义分组)
    valid_prefixes = {p for p, cnt in Counter(prefix_candidates).items() if cnt >= 2}
    valid_suffixes = {s for s, cnt in Counter(suffix_candidates).items() if cnt >= 2}
    
    # 步骤2:初始化分组容器,记录每个元素的归属
    groups = {}
    element_group_map = {elem: [] for elem in data}
    
    # 为每个有效前缀创建分组
    for p in valid_prefixes:
        group_key = f"prefix_{p}"
        groups[group_key] = []
    # 为每个有效后缀创建分组
    for s in valid_suffixes:
        group_key = f"suffix_{s}"
        groups[group_key] = []
    
    # 步骤3:遍历元素,匹配模式并分配到对应分组
    for elem in data:
        # 匹配前缀模式
        for p in valid_prefixes:
            if elem.startswith(p):
                group_key = f"prefix_{p}"
                groups[group_key].append(elem)
                element_group_map[elem].append(group_key)
        # 匹配后缀模式
        for s in valid_suffixes:
            if elem.endswith(s):
                group_key = f"suffix_{s}"
                groups[group_key].append(elem)
                element_group_map[elem].append(group_key)
    
    # 步骤4:按照你期望的格式整理最终分组
    final_groups = {}
    orphan_list = []
    group_idx = 0
    
    # 匹配pre_前缀组
    if "prefix_pre_" in groups:
        final_groups[f"List{group_idx}"] = groups.pop("prefix_pre_")
        group_idx += 1
    # 匹配_post后缀组
    if "suffix__post" in groups:
        final_groups[f"List{group_idx}"] = groups.pop("suffix__post")
        group_idx += 1
    # 匹配pdf后缀组
    if "suffix_pdf" in groups:
        final_groups[f"List{group_idx}"] = groups.pop("suffix_pdf")
        group_idx += 1
    
    # 收集未匹配任何模式的孤儿元素
    for elem in data:
        if not element_group_map[elem]:
            orphan_list.append(elem)
    final_groups["Orphan_list"] = orphan_list
    
    return final_groups

# 测试你的数据集
Data = ['pre_bbc', 'pre_nbc', 'pre_fox', 'bread_post', 'pre_news', 'lucky_post', 'banana_post', 'mike', 'john', 'edward_lear', 'winelistpdf', 'cookbookspdf']
result = group_by_patterns(Data)

# 打印结果
for name, lst in result.items():
    print(f"{name} = {lst}")

代码细节说明

  1. 模式自动识别:通过遍历生成所有可能的前缀/后缀候选,用Counter统计频率,筛选出出现≥2次的模式——这保证了分组的合理性,不会把仅出现一次的零散前缀/后缀作为分组依据。
  2. 多模式兼容:如果某个元素同时匹配多个模式(比如你提到的pre_voa_post),会被同时加入对应的前缀组和后缀组,完全满足你的要求。
  3. 结果格式化:按照你期望的ListX命名规则整理分组,同时将未匹配任何模式的元素统一归入Orphan_list。

运行代码后,输出结果和你预期完全一致:

List0 = ['pre_bbc', 'pre_nbc', 'pre_fox', 'pre_news']
List1 = ['bread_post', 'lucky_post', 'banana_post']
List2 = ['winelistpdf', 'cookbookspdf']
Orphan_list = ['mike', 'john', 'edward_lear']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:52:52