Python嵌套列表去重:保留首元素相同且第三元素最小的子列表
解决嵌套列表按指定字段去重并保留最小值项的问题
嘿,这问题我熟!你要做的是按子列表第一个元素分组,每组保留第三个元素最小的项对吧?你的嵌套循环思路其实有点绕,用字典来处理会更高效清晰,我给你捋清楚:
完整代码实现
l = [['a', 'random_str', 4], ['b', 'random_str2', 5], ['b', 'random_str3', 7]] # 用字典存储每个键对应的最小子列表,键为子列表第0个元素 min_dict = {} for sublist in l: key = sublist[0] current_num = sublist[2] # 若键不存在,或当前子列表的数值更小,则更新字典 if key not in min_dict or current_num < min_dict[key][2]: min_dict[key] = sublist # 将字典的值转换为列表,得到最终结果 result = list(min_dict.values()) print(result) # 输出: [['a', 'random_str', 4], ['b', 'random_str2', 5]]
代码思路解释
- 字典分组:用
min_dict来记录每个第一个元素(比如'a'、'b')对应的最小子列表,这样能快速判断当前元素是否已经出现过。 - 遍历判断:遍历每个子列表时,取出用于分组的
key和用于比较大小的current_num(子列表第2个索引的整数)。 - 更新逻辑:如果
key不在字典里,直接把当前子列表存进去;如果已经存在,就对比两个子列表的数值,保留更小的那个。 - 结果转换:最后把字典中的所有值转换成列表,就是我们需要的去重后结果。
为什么不用嵌套循环?
你最开始写的嵌套循环虽然能实现,但需要多次遍历列表,时间复杂度是O(n²),当列表里的元素很多时,运行速度会明显变慢。而用字典的方法只需要遍历一次列表,时间复杂度是O(n),效率提升非常明显。
内容的提问来源于stack exchange,提问作者unclephil123
相关产品推荐
相关产品推荐

