[('d', 100), ('c', 99), ('a', 89), ('b', 86)]如何快速得出['d','c','a','b']
arr1 = [('d', 100), ('c', 99), ('a', 89), ('b', 86)]
arr2 = []
for key in range(len(arr)):
arr2.append(arr[key][0])
感觉好low,有什么好的办法吗?
其实在用Python中在刷leetcode来学习
题目:https://leetcode.com/problems/top-k-frequent-elements/
class Solution(object):
def topKFrequent(self, nums, k):
"""
:type nums: List[int]
:type k: int
:rtype: List[int]
"""
items = {}
for item in nums:
if items.has_key(item):
items[item]+=1
else:
items[item]=1
arr1 = sorted(items.iteritems(), key=lambda asd:asd[1], reverse=True)
arr2 = []
for key in range(len(arr1)):
arr2.append(arr1[key][0])
return arr2[0:k]
很簡單,使用 list comprehension 即可:
看了一下你原本的問題,寫了一個簡潔的版本,可以參考一下:
(適用於 Python2.7+, Python3)
使用:
效果:
說明:
Python2.7+之後的版本,在
collections
庫裡有一種類Counter
可以用。collections
庫裡有一種類Counter
可以用。詳細的操作方法請參考Counter object
利用
🎜利用Counter(lst)
可以輕鬆得到一個Counter
實例,裡面已經對lst
中的元素作過統計了。之後利用
most_common(k)
方法可以輕鬆得到一個排序過的 list of tuple,而且只會剩下前出現頻率前k高的項目,最後用list comprehension
詳細的操作方法請參考Counter objectCounter(lst)
可以輕鬆得到一個Counter
實例,裡面已經對lst
中的元素作過統計了。 🎜之後利用most_common(k)
方法可以輕鬆得到一個排序過的list of tuple,而且只會剩下前出現頻率前k高的項目,最後用list comprehension
取出元素本身:🎜