繁体   English   中英

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

[英]Python - Sort a list of lists but only keep last item in each sublist

我有一个项目列表,我需要根据我给它的给定分数对其进行排序。 代码看起来像这样:

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() function 中的key参数。 您可以传入lambda function ,它使用您的评分 function 作为键返回分数列表。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM