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

Python按相似项对齐并排打印两个不等长列表 适配重复音乐处理

音乐重复文件双列表对齐对比的Pythonic实现

原实现存在的问题

  • 匹配逻辑逐一遍历参考列表,长列表下时间复杂度高
  • 用\t做分隔,不同终端环境下排版容易错位
  • 仅适配参考列表更短的场景,若原列表更长,未匹配的独有条目完全无法展示
  • 函数无统一返回值,最后输出冗余的None

优化实现代码

def build_match_map(ref_list: list[str]) -> dict[str, str]:
    """构建核心歌名到完整文件名的匹配映射,避免重复遍历"""
    match_map = {}
    for ref_item in ref_list:
        # 与原匹配逻辑对齐:去掉文件名开头的编号段作为匹配核心键
        core_name = ref_item.split(" ", 1)[-1]
        match_map[core_name] = ref_item
    return match_map


def aligned_list_compare(list_a: list[str], list_b: list[str]) -> str:
    match_map = build_match_map(list_a)
    rows = []
    matched_ref = set()  # 记录已匹配的参考列表条目,避免重复匹配

    # 遍历第二个列表的所有条目,匹配对应的参考条目
    for item_b in list_b:
        core_name_b = item_b.split(" ", 1)[-1]
        matched_item = match_map.get(core_name_b)
        if matched_item:
            matched_ref.add(matched_item)
        rows.append((item_b, matched_item or ""))

    # 补全参考列表中未被匹配的剩余条目,适配参考列表更长的场景
    for item_a in list_a:
        if item_a not in matched_ref:
            rows.append(("", item_a))

    # 动态计算两列的最大宽度,实现固定宽度对齐
    col1_width = max(len(row[0]) for row in rows) if rows else 0
    col2_width = max(len(row[1]) for row in rows) if rows else 0

    # 逐行格式化拼接输出
    output = []
    for col1, col2 in rows:
        output.append(f"{col1:<{col1_width}}  -->  {col2:<{col2_width}}")
    return "\n".join(output)


# 测试调用
a = ['01-06 How Does It Feel.mp3', '01-08 Never Walk Away.mp3']
b = ['01 Show Me a Sign.mp3',
     "02 Don't Let Go.mp3",
     '03 All Messed Up.mp3',
     '04 Promise Keeper.mp3',
     '05 Goodbye to You.mp3',
     '06 How Does It Feel.mp3',
     '07 Had Enough of You.mp3',
     '08 Never Walk Away.mp3',
     '09 Nothing Left at All.mp3',
     '10 Reality Show.mp3',
     '11 Killing With Kindness.mp3']

print(aligned_list_compare(a, b))

最终输出效果

01 Show Me a Sign.mp3        -->  
02 Don't Let Go.mp3          -->  
03 All Messed Up.mp3         -->  
04 Promise Keeper.mp3        -->  
05 Goodbye to You.mp3        -->  
06 How Does It Feel.mp3      -->  01-06 How Does It Feel.mp3
07 Had Enough of You.mp3     -->  
08 Never Walk Away.mp3       -->  01-08 Never Walk Away.mp3
09 Nothing Left at All.mp3   -->  
10 Reality Show.mp3          -->  
11 Killing With Kindness.mp3 -->  

实现的Pythonic特性

  • 预先构建字典匹配索引,将原逻辑的O(n*m)时间复杂度优化为O(n+m),长列表对比时效率提升显著
  • 遍历过程中记录已匹配条目,最后补全长列表的剩余内容,无论两个列表谁更长,都能全量展示所有条目,不会漏项
  • 动态计算列宽实现固定宽度格式化,替代易错位的制表符,不同长度的文件名、不同终端环境下都能保持对齐的规整排版
  • 函数返回格式化后的字符串而非边遍历边打印,调用方可灵活选择输出到控制台、写入文件或做后续流程处理,扩展性更强
  • 移除了原实现中冗余的None打印输出,逻辑更简洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 01:57:03