如何生成无重复姓名-团队组合的嵌套列表并保留顺序?
Python 列表去重:保留唯一姓名-团队组合的子列表
你的需求是过滤嵌套列表,只保留姓名+团队组合完全唯一的子列表(重复组合的所有条目都丢弃),同时维持原列表的顺序。直接用set()这类方法没法实现,因为它们只会去重保留一个条目,而不是删掉所有重复组合。下面是可行的解决方案:
步骤1:统计组合出现次数
先遍历原列表,用字典统计每个(姓名, 团队)组合的出现次数:
scores = [['Ali', 15, 'Zebra'], ['Mo', 20, 'Donkey'], ['Ali', 18, 'Zebra'], ['Liz', 20, 'Mouse']] # 统计每个(姓名, 团队)组合的出现次数 combo_counts = {} for name, _, team in scores: combo_key = (name, team) combo_counts[combo_key] = combo_counts.get(combo_key, 0) + 1
步骤2:过滤生成目标列表
再次遍历原列表,只保留那些组合次数为1的子列表:
new_scores = [item for item in scores if combo_counts[(item[0], item[2])] == 1]
验证结果
执行后打印new_scores,就能得到你要的结果:
print(new_scores) # 输出: [['Mo', 20, 'Donkey'], ['Liz', 20, 'Mouse']]
这个方法的优势是:
- 严格遵循需求:重复组合的所有条目都被丢弃
- 完全保留原列表的顺序
- 时间复杂度为O(n),效率较高
内容的提问来源于stack exchange,提问作者coding stuff
相关产品推荐
相关产品推荐

