[('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]
C'est très simple, il suffit d'utiliser la compréhension de liste :
J'ai regardé votre question originale et écrit une version concise, vous pouvez vous y référer :
(Applicable à Python2.7 , Python3)
Utiliser :
Effet :
Description :
Pour Python 2.7 et versions ultérieures, il existe une classe
collections
disponible dans la bibliothèqueCounter
.Pour les méthodes de fonctionnement détaillées, veuillez vous référer à l'objet Compteur
En utilisant
Counter(lst)
, vous pouvez facilement obtenir une instanceCounter
, qui a déjà compté les éléments danslst
. Après, vous pouvez facilement obtenir une liste triée de tuples en utilisant la méthode
most_common(k)
, et seuls les éléments avec la fréquence d'occurrence la plus élevée resteront. Enfin, utilisezlist comprehension
pour supprimer l'élément lui-même :