如何按指定索引对嵌套列表去重,保留目标元素对应首项?
嵌套列表按指定索引去重解决方案
你的问题出在原代码是拿整个子列表判断是否重复,但每个子列表的第二个元素(数值)不一样,所以所有元素都会被加入新列表。要实现按名字(子列表索引0的元素)去重,且保留每个名字首次出现的项(也就是数值最大的那个),可以这么改:
liz = [['Lina', 60], ['Gaga', 0], ['Dene', 100], ['Dene', 80], ['Dene', 0], ['Helen', 0], ['Will', 100]] lix = [] seen_names = set() # 用集合存已处理的名字,查询效率更高 for ele in liz: current_name = ele[0] if current_name not in seen_names: lix.append(ele) seen_names.add(current_name) print(lix)
运行后就能得到期望输出:[['Lina', 60], ['Gaga', 0], ['Dene', 100], ['Helen', 0], ['Will', 100]]
原理很直接:用集合记录已经保留过的名字,遍历原列表时,只要当前子列表的名字没在集合里,就把它加入结果列表,同时把名字存入集合。因为原列表已经按每个名字的数值从大到小排序,首次出现的就是数值最大的项,刚好满足你的需求。
内容的提问来源于stack exchange,提问作者user21308739
相关产品推荐
相关产品推荐

