Python:Code Taka第2週4
Q.numsは数字からなる配列です。最もよく現れる数字をk個返してください。
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
私の答え
from collections import Counter
def top_k(nums, k):
cnt = Counter(nums)
top = cnt.most_common()
result = []
for n in range(k):
result.append(top[n][0])
return result
class collections.Counter([iterable-or-mapping])
カウンタ({1:3,2:2,3:1})は
[(1,3),(2,2),(3,1)]は
答えはリストしたい形式なのでresultというリストに値を追加しました.
もう少し簡単に直した答え
from collections import Counter
def top_k(nums, k):
cnt = Counter(nums)
top = cnt.most_common(k)
return list(map(lambda x: x[0], top))
ソリューション
def top_k(nums, k):
count = {}
for n in nums:
count[n] = count.get(n, 0) + 1
bucket = [[] for _ in range(len(nums)+1)]
for n, freq in count.items():
bucket[freq].append(n)
ret = []
for n_list in bucket[::-1]:
if n_list:
ret.extend(n_list)
if len(ret) == k:
return ret
(ソリューションを分析中...)Reference
この問題について(Python:Code Taka第2週4), 我々は、より多くの情報をここで見つけました https://velog.io/@pm1100tm/Python-Code-Taka-10일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol