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

合并嵌套列表中的重复项技术问询

元组列表前缀重复项合并去重实现方案

需求说明

给定列表:

[('John', 'Johns', 'Jonh'), ('Mark', 'Marke', 'Marken'), ('John', 'Johns', 'Jonh','Johna'), ('James', 'Jame')]

需要移除作为其他元组前缀的短元组,保留包含完整内容的长元组,最终得到:

[('Mark', 'Marke', 'Marken'), ('John', 'Johns', 'Jonh','Johna'), ('James', 'Jame')]

实现方案

方案一:全局前缀检查(通用场景)

核心思路是优先保留长元组,再过滤掉所有是已有长元组前缀的短元组,步骤如下:

  1. 按元组长度降序排序,确保长元组先被处理
  2. 遍历排序后的元组,仅保留那些不是结果列表中任意元组前缀的项
  3. 可选:恢复原列表中非重复项的相对顺序

代码实现:

original_list = [('John', 'Johns', 'Jonh'), ('Mark', 'Marke', 'Marken'), ('John', 'Johns', 'Jonh','Johna'), ('James', 'Jame')]

# 按长度降序排序,长元组优先
sorted_items = sorted(original_list, key=lambda x: len(x), reverse=True)

final_result = []
for item in sorted_items:
    # 检查当前元组是否是结果中任意元组的前缀,不是则加入
    if not any(res[:len(item)] == item for res in final_result):
        final_result.append(item)

# 恢复原列表的元素顺序(可选)
final_result = sorted(final_result, key=lambda x: original_list.index(x))

print(final_result)

方案二:分组保留最长元组(已知重复项按首元素分组场景)

如果能确定重复元组的首元素相同,可以按首元素分组,每组直接保留最长元组,效率更高:

from collections import defaultdict

original_list = [('John', 'Johns', 'Jonh'), ('Mark', 'Marke', 'Marken'), ('John', 'Johns', 'Jonh','Johna'), ('James', 'Jame')]

# 按元组首元素分组
grouped = defaultdict(list)
for tpl in original_list:
    grouped[tpl[0]].append(tpl)

final_result = []
for group in grouped.values():
    # 每组取最长的元组
    longest_tpl = max(group, key=lambda x: len(x))
    final_result.append(longest_tpl)

# 恢复原列表的元素顺序(可选)
final_result = sorted(final_result, key=lambda x: original_list.index(x))

print(final_result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:50:25