python Algorithm #2
nums는 숫자로 이루어진 배열입니다.
가장 자주 등장한 숫자를 k 개수만큼 return 해주세요.
ex)
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
첫 시도 코드
def top_k(nums, k):
a=dict()
c=[]
for i in nums:
a[i]=nums.count(i)
b=(sorted(a.items(),key = lambda x:x[1] ,reverse=True))
for i in range(k):
c.append(b[i][0])
return c
top_k([1,1,3,3,4,5],2)
nums를 for loop로 돌려서 count 함수로 키에 nums값 값에 count 값을 넣고 딕셔너리{1:2, 3:2, 4:1, 5:1}생성 후 a에 저장
a.items() 하게되면 리스트안에 튜플형식으로 키,값 [(1,2),(3,2),(4,1),(5,1)] 생성
b라는 변수에 a변수(딕셔너리)안에 값을 lamda x로 튜플을 하나씩 (x[1]=값,x[0]=키) 값을 기준으로 내림차순 정렬 하여 리스트 b에 저장
b에서 많이 나온순 2개 출력해야하므로
for loop로 k 만큼 돌려서 c리스트의 index 0번째의 튜플 index 0번째(키)를 리스트c에 추가
Counter 라이브러리를 이용한 방법
from collections import Counter
def top_k(nums, k):
b=[]
a=Counter(nums).common(k)
for i in range(k):
b.append(a[i][0])
return b
top_k([1,1,3,3,4,5],2)
Counter함수가 nums의 각요소의 개수를 세어 딕셔너리 형태로 만들고
.common은 그 딕셔너리중 값이 큰 순으로 k개를 추출해 낸다. items()의 함수와 max를 합친느낌? 찾다보니 이런 라이브러리도 있어서 사용해 봤다.
Author And Source
이 문제에 관하여(python Algorithm #2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tgrf07/Python-Algorithm-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)