如何基于首个元素移除数组重复项?嵌套数组场景求解
解决嵌套二元列表按首个元素去重并保留首次出现的问题
嘿,这个场景我之前处理过!普通列表用list(dict.fromkeys(lst))去重确实方便,但碰到这种每个元素都是二元子列表的情况,就没法直接套用了。不过有两个实用的办法能实现你要的效果——只保留每个首个元素的首次出现实例,不管第二个元素是什么:
方法一:利用Python 3.7+的有序字典特性(简洁版)
从Python 3.7开始,字典会严格保留键的插入顺序,我们可以用字典推导式把每个子列表的首个元素作为键,整个子列表作为值,这样重复的键会被首次出现的子列表覆盖,最后提取字典的值转成列表就行:
lst = [['a','1'],['b','2'],['b','1'],['c','3'],['c','2']] deduped_lst = list({item[0]: item for item in lst}.values()) print(deduped_lst) # 输出: [['a', '1'], ['b', '2'], ['c', '3']]
这个写法非常简洁,一行就能搞定,前提是你用的是Python 3.7及以上版本。
方法二:循环+集合追踪(兼容旧版本)
如果你的Python版本低于3.7(字典不保证插入顺序),或者你想更直观地控制去重逻辑,可以用循环配合集合来记录已经出现过的首个元素:
lst = [['a','1'],['b','2'],['b','1'],['c','3'],['c','2']] seen_first_elements = set() deduped_lst = [] for sublist in lst: first_elem = sublist[0] if first_elem not in seen_first_elements: seen_first_elements.add(first_elem) deduped_lst.append(sublist) print(deduped_lst) # 输出: [['a', '1'], ['b', '2'], ['c', '3']]
这个方法的逻辑很清晰:用集合seen_first_elements存已经处理过的首个元素,遍历原列表时,只有当当前子列表的首个元素没出现过,才把它加入结果列表,同时更新集合。不管什么Python版本都能稳定运行。
内容的提问来源于stack exchange,提问作者Maurio
相关产品推荐
相关产品推荐

