Python嵌套列表按前两个元素分组取第四个元素最大值的实现
代码问题排查
你写的代码存在以下几个核心问题:
- 遍历列表
finallist的同时执行remove操作,会导致列表索引动态变化,大量元素被跳过未处理 maxlist没有按分组清空,所有分组的第四个元素都会被存入,最终求出来的最大值不属于单分组- 双重循环逻辑冗余,时间复杂度高,还容易出现变量作用域错误
- 你给出的预期输出疑似存在笔误,第二个子列表漏写了第三个元素
1488,符合业务逻辑的正确预期应为[['191','279','1488','1425'],['104','264','1488','1425']]
正确实现方案
使用字典做分组存储,仅需一次遍历即可完成计算,无需引入第三方库:
# 原始嵌套列表 raw_list = [ ['191', '279', '1488', '1425'], ['191', '279', '1488', '855'], ['191', '279', '1488', '1140'], ['191', '279', '1488', '285'], ['191', '279', '1488', '665'], ['191', '279', '1488', '570'], ['104', '264', '1488', '1140'], ['191', '279', '1488', '760'], ['104', '264', '1488', '760'], ['104', '264', '1488', '665'], ['104', '264', '1488', '1425'], ['104', '264', '1488', '285'], ['104', '264', '1488', '855'] ] group_dict = {} for item in raw_list: # 以前两个元素组成的元组作为分组唯一键(列表不能作为字典key) group_key = (item[0], item[1]) current_4th = int(item[3]) if group_key not in group_dict: # 新分组存入第三个元素和当前第四个元素的数值 group_dict[group_key] = [item[2], current_4th] else: # 已有分组对比第四个元素,保留最大值 if current_4th > group_dict[group_key][1]: group_dict[group_key][1] = current_4th # 转换为要求格式的结果列表 maxlist = [] for key, value in group_dict.items(): maxlist.append([key[0], key[1], value[0], str(value[1])]) print(maxlist)
如果你的原始输入是分号分隔的字符串集合,可以保留原有的拆分逻辑,将拆分得到的finallist替换上述代码中的raw_list即可。
内容的提问来源于stack exchange,提问作者LinuxFighter
相关产品推荐
相关产品推荐

