Code KATA | # 7
質問する
numsは数字からなる配列です.
最もよく現れる数字をk個返してください.
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
問題解決方法
問題の重点を定める
この3つの問題を解決する方法は、次のとおりです.
要素カウントをディックシーケンスとして保存
マイコード
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とする.
Reference
この問題について(Code KATA | # 7), 我々は、より多くの情報をここで見つけました
https://velog.io/@jung2one/Code-KATA-7
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について(Code KATA | # 7), 我々は、より多くの情報をここで見つけました https://velog.io/@jung2one/Code-KATA-7テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol