python - 根据其他重复值选择要保留的列表中的值
问题描述
我有一个排序列表(见下文)。子列表按末尾的值排序到主列表中,并且总是有重复的数字。
List = [[1,1.5,3],[2,1,3],[4,0,3],[2,3,2],[1,4,2],[1,2,1],[1,1,1],[3,1,1]]
对于末尾具有相同值的每个子列表(例如,前 3 个子列表有 3,接下来的 2 个有 2,最后 3 个有 1),我只想保留子列表具有最高的第二项。
例如,让我们使用上面的列表。前 3 个子列表以 3 结尾,子列表中的最大第二个值为 1.5,因此我们保留子列表 [1,1.5,3] 并删除其他两个。对于以 2 结尾的子列表,4 是最高的第二个值,因此我们保留子列表 [1,4,2] 并删除另一个。希望你明白这一点。结束名单是:
newList = [[1,1.5,3],[1,4,2],[1,2,1]]
*实际上,子列表中的第二个值是非常精确的数字,并且永远不会彼此相等,因此不会出现其中一个不是最大的情况。
解决方案
好吧,我对计算机科学知之甚少,但我认为这很有效:
List = [[1,1.5,3],[2,1,3],[4,0,3],[2,3,2],[1,4,2],[1,2,1],[1,1,1],[3,1,1]]
new_list = [List[0]]
for item in List[1:]:
if item[-1] == new_list[-1][-1]:
if item[1] > new_list[-1][1]:
new_list[-1] = item
else:
new_list.append(item)
print(new_list)
您假设主列表中的第一个列表总是具有最高的第二个条目并将其添加到 new_list。当您迭代主列表的项目时,如果迭代中的项目仍然具有与添加到 new_list 的最后一个项目相同的“最后一个值”,则比较它是否具有更高的第二个条目并替换它,否则,您将项目添加到 new_list。
推荐阅读
- python - OpenCV erode 选择什么内核?
- android - 多个设备的wifi直接连接问题
- tensorflow - 从 Tensorflow Keras 禁用日志
- azure-cosmosdb - 分页查询导致高吞吐量使用
- java - 打印具有相同名称的不同对象类型的映射的通用方法属于不同的类
- ctags - 我怎样才能得到真正的 ctags 行?
- javascript - 重新发送电子邮件验证 MERN
- c++ - 关于rgb数值比较的混淆
- python - 如何在python中几个文件的某些行的末尾添加一个字符串
- scala - 运行 scala 程序集 fat jar 时“找不到数据源:json”