문제31: 상위 k 빈도 요소

Created
Feb 12, 2023 06:03 AM
Tags
 

문제


상위 k번 이상 등장하는 요소를 추출하라.
 

입력


nums = [1,1,1,2,2,3], k = 2
 

출력


[1,2]
 

풀이


  1. 카운터 사용
freqs = collections.Counter(nums) s = sorted(freqs.items(), key=lambda x: -1 * x[1]) return [item[0] for item in s[:k]]
  1. 파이썬 다운 방식
return list(zip(*collections.Counter(nums).most_common(k)))[0]

새로운 개념


  • collections.Counter(list).most_common(k) = 빈도수가 높은 순서대로 아이템을 추출하는 기능 제공
  • zip() = 2개 이상의 시퀀스를 짧은 길이를 기준으로 일대일 대응하는 새로운 튜플 시퀀스를 반환
a = [1,2,3,4,5] b = [2,3,4,5] c = [3,4,5] zip(a,b,c) = [(1,2,3), (2,3,4), (3,4,5)] # C를 기준으로 엮임!
  • 아스테리스크(*) = 튜플 또는 리스트 등의 시퀀스 unpacking 시에 사용.
a = [1,2,3,4] print(a) # [1,2,3,4] print(*a) # 1 2 3 4
  • 두개짜리(**) = 키, 값 페어를 unpacking
>>> date_info = {'year': '2020', 'month': '01', 'day': '7'} >>> new_info = {**date_info, 'day': '14'} >>> new_info {'year': '2020', 'month': '01', 'day': '14'}