def top_k(nums, k):
count_num = [] [1]
num = set(nums) [2]
for i in num:
count_num.append([i,nums.count(i)]) [3]
count_num.sort(key=lambda x:x[1], reverse=True) [4]
return [row[0] for row in count_num][:k] [5]
[1] : count_num 이라는 빈 리스트를 생성한다.
[2] : nums를 set으로 중복을 제거한다.
[3] : num에 있는 요소마다 그 요소의 갯수를 nums에서 count 해서 요소와 함께 리스트로 묶어 count_num에 추가한다.
[4] : key 매개변수와 lambda식을 이용하여 2차원 리스트의 각 두번째 열를 기준으로 reverse=True 를 이용하여 큰 값부터 정렬한다.
[5] : 2차원 리스트의 첫번째 열만을 k 개수만큼 리스트로 return 한다.
☑️ 비교할 요소가 여러 개인 경우 튜플로 순서를 정할 수 있다.
count_num.sort(key=lambda x : (x[0], -x[1]))
☑️ 다차원 리스트에서 특정 열을 선택하는 방법
list(map(lambda x : x[0], count_num))
list(list(zip(*count_num))[0])
print(count_num)
print(list(zip(*count_num)))
[[2, 2], [3, 2], [1, 1]]
[(2, 3, 1), (2, 2, 1)]
👉🏻 zip() 이란?
- python의 내장 함수로 동일한 개수로 이루어진 자료형을 묶어주는 역할을 한다.
- 행을 열로 pivot 해준다.
- 각 열을 기준으로 값을 slice할 수 있다.
- 2개의 배열의 하나의 배열로 언패킹 할 수 있다.
- 변환된 값은 tuple의 형태를 갖고 있다.
- list(), dict()등을 사용하여 형 변환하지 않을시 에러가 발생한다.