首页 > 解决方案 > 根据其他重复值选择要保留的列表中的值

问题描述

我有一个排序列表(见下文)。子列表按末尾的值排序到主列表中,并且总是有重复的数字。

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]]

*实际上,子列表中的第二个值是非常精确的数字,并且永远不会彼此相等,因此不会出现其中一个不是最大的情况。

标签: pythonpython-3.x

解决方案


好吧,我对计算机科学知之甚少,但我认为这很有效:

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。


推荐阅读