python - Top K Frequent Elements?
阿神
阿神 2017-04-17 17:43:28
0
1
435

[('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]
阿神
阿神

闭关修行中......

répondre à tous(1)
刘奇

C'est très simple, il suffit d'utiliser la compréhension de liste :

arr1 = [('d', 100), ('c', 99), ('a', 89), ('b', 86)]
arr2 = [pair[0] for pair in arr1]

J'ai regardé votre question originale et écrit une version concise, vous pouvez vous y référer :
(Applicable à Python2.7 , Python3)

from collections import Counter

def top_k_frequent(lst, k):
    return [key for key, count in Counter(lst).most_common(k)]

Utiliser  :

lst = [1, 1, 1, 2, 3, 4, 4]
print(top_k_frequent(lst, 2))

Effet :

[1, 4]

Description :

Pour Python 2.7 et versions ultérieures, il existe une classe collections disponible dans la bibliothèque Counter.
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 instance Counter, qui a déjà compté les éléments dans lst. 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, utilisez list comprehension pour supprimer l'élément lui-même :

$>> from collections import Counter
$>> counter = Counter([1, 1, 1, 2, 3, 4, 4])
$>> counter
Counter({1: 3, 4: 2, 2: 1, 3: 1})
$>> most_items = counter.most_common(2)
$>> most_items
[(1, 3), (4, 2)]
$>> [key for key, count in most_items]
[1, 4]
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal