从列表的列表中获取顶部的n个元素



我使用下面的例子进行演示。

[["apple",10],
["oranges",5],
["strawberies",2],
["pineapples",12],
["bananas",9],
["tomattoes",8],
["watermelon",1],
["mangos",7],
["grapes",11],
["potattoes",3]]

我想获得按数量排列的前3个水果(返回的前3个元素),但是我不想改变顺序。所以最终结果是

[["apple",10],
["pineapples",12],
["grapes",11]]

任何帮助都将不胜感激。

arr = [["apple",10],
["oranges",5],
["strawberies",2],
["pineapples",12],
["bananas",9],
["tomattoes",8],
["watermelon",1],
["mangos",7],
["grapes",11],
["potattoes",3]]
sorted_arr = sorted(arr,key=lambda x: x[1],reverse=True)[:3]
output = [elem for elem in arr if elem in sorted_arr]
print(sorted_arr)
print(output)

首先,对数组进行反向排序以获得前3个元素。然后,使用列表推导式循环遍历原始数组,检查元素是否在前3个数组中。这保留了顺序。

您可能听说过,有一种排序方法可以应用于列表。您可以将键作为一个函数传入,该函数将指示您希望如何对列表进行排序。

l = [["apple",10],
["oranges",5],
["strawberies",2],
["pineapples",12],
["bananas",9],
["tomattoes",8],
["watermelon",1],
["mangos",7],
["grapes",11],
["potattoes",3]]
l.sort(key = lambda x: x[1]) #to sort by second element
result = l[-3:] # To get the top three elements


最新更新