Python-对列表列表进行排序,但只保留每个子列表中的最后一项



我有一个项目列表,需要根据给定的分数进行排序。代码如下:

original_list = [item_1, item_2, item_3]
# ... Here I score the list in a separate function to get a score for each item ...
scored_list = [[35, item_1], [45, item_2], [1, item_3]]
scored_list.sort()
sorted_list = [item[1] for item in scored_list]

所以我有一个项目列表,对每个项目进行评分,根据评分对列表进行排序,然后删除评分变量,只保留项目。

这是做这种操作最有效的方法吗?还是有更简单的方法可以获得同样的结果?

效率方面我怀疑你能做得更好。如果你关心行数,你可以将排序移动到理解内部:

scored_list = [[35, item_1], [45, item_2], [1, item_3]]
sorted_list = [item[1] for item in sorted(scored_list)]

但就速度而言,你可能不会注意到差异。事实上,这可能比您的方法慢一点,因为就地sort()可能会快一点,这是因为它不需要复制,但取决于您的数据,可以忽略不计。

所以我认为你的方法非常好。如果你想让它更简洁,你可以使用sorted()

这是正确的方法,但您可以使用列表理解:

scored_list = [i[1] for i in sorted(scored_list, key=lambda s: s[0])]

为了解开分数和项目,可以使用:

the_scores, the_items = zip(*scored_list)

为了效率,你能做的不多。事实上,我认为你不能做其他事情。

对数组进行排序时,可以在sorted()函数中使用key参数。您可以传入lambda函数,该函数使用您的评分函数作为键返回分数列表。

def calcScore(x):
# Calculate score here
pass
original_list = [item_1, item_2, item_3].
sorted_list = sorted(original_list, key=lambda x: [calcScore(x) for x in original_list])

最新更新