codekata #9 (week 2) Top K Frequent Elements


Leetcode #347 Top K Frequent Elements

質問する

numsはデジタル配列です.
最もよく見られる数字はk個です
nums = [1,1,1,2,2,3],
k = 2

return [1,2]

nums = [1]
k = 1

return [1]

私の答え

def top_k(nums, k):

    numdict = {}
    result = []
    for x,y in enumerate(nums):
       numdict[y] = 0
   
    for i in nums:
       numdict[i] = nums.count(i)
    
    result = sorted(numdict.items(),reverse=True, key = lambda x : x[1])
    
    return list(dict(result).keys())[0:k]

  • ユニット数量宣言

  • 結果を宣言して、ディクシャナのキーを値でソートします.

  • numsをdickshernerに設定し、for loopを使用してelements countを計算します.

  • ソート関数を使用して、終了文のディックシーケンスを値に基づいてソートします.
    1)items()関数を使用して値を減算
    2)reverse=Trueを使用して、昇順ではなくdefaultの降順で並べ替えます.
    3)key= lambda x : x[1]を使用して[(key , value), ...]の釘の形で返却する

  • 返される値は一般的な数ではないため、keys()メソッドを使用してディック・シェリーをリストにし、k値でリストをリストします.
  • Collections


    collections-コンテナデータ型
    より良い解決策がない場合は、Pythonが提供するライブラリ集合モジュールについて理解しました.

    collectionsには、データを処理するために有用なオブジェクトがたくさんあり、counter()は、リストをカウントするためにハッシュするのに役立ちます.
    ここで、counter()most_common(n)メソッドは、指定された配列内の要素を降順に並べ替え、n(element,count)のtuple形式を返す.
    これにより、コードを大幅に簡略化できます.
    from collections import Counter
    
    def top_k(nums, k):
    
        result = Counter(nums).most_common(k)
        answer = [num[0] for num in result]
        return answer

  • 戻りパラメータnumsは、kを降順とするtuple形式である
    [(nums[x], nums.count(x) , (nums[y], nums.count(y)) ... ]

  • リスト計算を使用してresultのtupleの最初の要素key(nums[x],nums[y]..)をリストに変換して返します.
  • 時間に余裕があれば、Collectionsモジュールをさらに検討する必要があります.