如何在Python中按子列表前两项去重列表中的重复子列表?
嘿,这个需求很清晰,咱们可以用两种简洁的方式实现,刚好对应你提到的“生成前两项元组”的思路:
方法一:用集合跟踪已出现的组合(直观易懂)
这种方式一步步拆解逻辑,适合新手理解底层原理:
original_list = [[2, 3, 5], [3, 3, 1], [2, 3, 8]] seen = set() result = [] for sublist in original_list: # 把前两项转成元组(列表不能存入集合,元组是可哈希的) key = tuple(sublist[:2]) if key not in seen: seen.add(key) result.append(sublist) print(result) # 输出: [[2, 3, 5], [3, 3, 1]]
核心逻辑就是用seen集合记录已经处理过的前两项组合,遍历的时候只保留第一次出现的子列表,后面重复的直接跳过。
方法二:用字典去重(简洁高效)
如果你喜欢更紧凑的代码,利用Python 3.7+字典保留插入顺序的特性,可以用推导式快速搞定:
original_list = [[2, 3, 5], [3, 3, 1], [2, 3, 8]] # 用前两项元组做键,子列表做值,自动去重(保留第一个出现的条目) unique_dict = {tuple(s[:2]): s for s in original_list} result = list(unique_dict.values()) print(result) # 同样得到目标结果
这里字典的键是唯一的,遍历原列表时,后面的重复键会覆盖前面的,但因为我们是按顺序遍历,字典里最终存的是每个组合第一次出现的子列表,转成列表就是你要的结果。
两种方法都能完美解决你的问题,看你更喜欢哪种风格啦~
内容的提问来源于stack exchange,提问作者tinker
相关产品推荐
相关产品推荐

