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

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

闭关修行中......

membalas semua(1)
刘奇

Ia sangat mudah, hanya gunakan pemahaman senarai:

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

Saya melihat soalan asal anda dan menulis versi ringkas, anda boleh merujuknya:
(Berlaku untuk Python2.7 , Python3)

from collections import Counter

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

Gunakan :

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

Kesan:

[1, 4]

Penerangan:

Untuk Python 2.7 dan versi yang lebih baru, terdapat kelas collections tersedia dalam pustaka Counter.
Untuk kaedah operasi terperinci, sila rujuk objek Kaunter

Menggunakan Counter(lst) anda boleh mendapatkan contoh Counter dengan mudah, yang telah mengira elemen dalam lst. Selepas
, anda boleh mendapatkan senarai tupel yang diisih dengan mudah dengan menggunakan kaedah most_common(k), dan hanya item dengan kekerapan kejadian tertinggi yang akan kekal Akhir sekali, gunakan list comprehension untuk mengalih keluar elemen itu sendiri:

$>> 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]
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan