簡體   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