Code KATA | # 7


質問する


numsは数字からなる配列です.
最もよく現れる数字をk個返してください.
nums = [1,1,1,2,2,3],
k = 2
 
return [1,2]
 
nums = [1]
k = 1
 
return [1]

問題解決方法


問題の重点を定める
  • リスト内の各要素の数
  • について説明します.
  • の最も多い要素はkの順序で
  • を返す.
    この3つの問題を解決する方法は、次のとおりです.
    要素カウントをディックシーケンスとして保存
  • for文を使用してcountメソッドで要素の個数を入力し、カウントされている場合は
  • をスキップし続けます.
  • for文を使用して、最大値をk値の範囲に繰り返し抽出し、結果リストに保存します.
  • max関数のlambdaオプションを提供し、値の最大値をフィルタし、キー値
  • を抽出します.

    マイコード

    def top_k(nums, k):
        num_dic={}
        for i in nums:
            if i in num_dic:
                continue
            num_dic.update({i:nums.count(i)})
    
        result=[]
        for i in range(k):
            max_num=max(num_dic, key=lambda x:num_dic[x])
            result.append(max_num)
            num_dic.pop(max_num)
        
        return result

    ほかの方法


    前に使用したcollectionsのcounter関数を使用すると、最初のステップ、すなわち各要素の数を格納するディックシーケンスを作成するプロセスを短縮できます.
    from collections import Counter
    num_dic=Counter(nums)

    What I Learnt


    max関数のlambdaフォーマット


    Lambdaは、パラメータを任意の式に加工し、結果値を得るために使用されます.今回max関数では,valueの最大値を判別し,lambdaターゲットkey xをvalueとして指定し,条件に合致する値にキー値を指定してmax関数の判別対象をvalueとする.