如何用Python移除嵌套列表中重复的元组集合
移除嵌套列表中集合重复的子列表
我有一个嵌套列表结构,每个子列表包含若干元组。需要从外层列表中移除元组集合完全相同的子列表——即便子列表内的元组顺序不同,只要元组的集合一致,就视为重复项,仅保留其中一个。
示例输入
[ [('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 5), ('F', 6), ('G', 7), ('H', 8)], [('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 5), ('F', 6), ('H', 7), ('G', 8)], [('G', 1), ('H', 2), ('F', 3), ('E', 4), ('D', 5), ('C', 6), ('B', 7), ('A', 8)] ]
期望输出
[ [('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 5), ('F', 6), ('G', 7), ('H', 8)], [('G', 1), ('H', 2), ('F', 3), ('E', 4), ('D', 5), ('C', 6), ('B', 7), ('A', 8)] ]
解决方案
核心思路是给每个子列表生成唯一标识:将子列表内的元组排序后转为元组(列表不可哈希,无法存入集合),用集合记录已出现过的标识,遍历原列表时只保留标识未出现过的子列表。
实现代码:
original_list = [ [('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 5), ('F', 6), ('G', 7), ('H', 8)], [('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 5), ('F', 6), ('H', 7), ('G', 8)], [('G', 1), ('H', 2), ('F', 3), ('E', 4), ('D', 5), ('C', 6), ('B', 7), ('A', 8)] ] seen = set() unique_list = [] for sublist in original_list: # 生成唯一标识:排序后的元组,确保集合相同的子列表标识一致 identifier = tuple(sorted(sublist)) if identifier not in seen: seen.add(identifier) unique_list.append(sublist) # 打印结果 for item in unique_list: print(item)
说明
- 排序操作能让元组顺序不同但集合相同的子列表生成完全一致的标识;
- 使用集合
seen快速判断标识是否已出现,时间效率较高; - 代码会保留原列表中每个唯一集合对应的第一个子列表,若需保留最后一个,可调整遍历顺序或逻辑。
内容的提问来源于stack exchange,提问作者psychcoder
相关产品推荐
相关产品推荐

