検索

ホームページ  >  に質問  >  本文

python - Top K Frequent Elements?

[('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]
阿神阿神2893日前444

全員に返信(1)返信します

  • 怪我咯

    怪我咯2017-04-17 17:45:28

    これは非常に簡単です。リスト内包表記を使用するだけです。

    リーリー

    私はあなたの元の質問を見て、簡潔なバージョンを書きました。それを参照してください:
    (Python2.7+、Python3 に適用可能)

    リーリー

    :

    を使用します リーリー

    効果:

    リーリー

    説明:

    Python 2.7 以降のバージョンの場合、collections ライブラリで使用できるクラス Counter があります。
    詳しい操作方法はCounterオブジェクトを参照

    Counter(lst) を使用すると、Counter 内の要素が既にカウントされている lst インスタンスを簡単に取得できます。
    の後は、most_common(k) メソッドを使用して簡単にソートされたタプルのリストを取得できます。最後に、list comprehension を使用して要素自体を削除します。 > リーリー

    返事
    0
  • キャンセル返事