sort / sorted

nums = [3, 1, 2]
nums.sort()                   # sort  : 원본 리스트 변경
sorted_nums = sorted(nums)    # sorted: 새 리스트 반환

[1, 2, 3]

reverse

nums = [3, 1, 2]
nums.sort(reverse=False)                  # 오름차순(기본값)
desc_nums = sorted(nums, reverse=True)    # 내림차순

[1, 2, 3]        
[3, 2, 1]

key

nums = ["3", "1", "2"]
nums.sort(key=int)          # 문자열 -> 숫자 변환 기준 정렬

["1", "2", "3"]

words = ["apple", "orange", "pear", "banana"]
words.sort(key=len)         # 문자열 길이 기준 정렬

["pear", "apple", "orange", "banana"]

words = ["apple", "orange", "pear", "banana"]
# 1차 기준: 길이
# 2차 기준: 사전 순서
words.sort(key=lambda x: (len(x), x))

["pear", "apple", "banana", "orange"]

tuples = [(1, 3), (1, 2), (2, 1)]
# 1차 기준: 튜플의 1번째 값
# 2차 기준: 튜플의 2번째 값
tuples.sort(key=lambda x: (x[0], x[1]))

[(1, 2), (1, 3), (2, 1)]

tuples = [(1, 2), (1, 4), (2, 5)]
# 1차 기준: 튜플 1번째 값 오름차순
# 2차 기준: 튜플 2번째 값 내림차순(int 타입에 대해서만 -x 가능)
tuples.sort(key=lambda x: (x[0], -x[1]))

[(1, 4), (1, 2), (2, 5)]


Hash Table + sort

order = {'gold': 0, 'silver': 1, 'bronze': 2}
medals = ['silver', 'gold', 'bronze']
medals.sort(key=lambda x: order[x])

['gold', 'silver', 'bronze']


Counter + sort

from collections import Counter

nums = [1, 1, 2, 3, 1, 2]
cnt = Counter(nums)           # Counter({1: 3, 2: 2, 3: 1}) 생성
# 1차 기준: 등장 빈도 내림차순
# 2차 기준: 값 오름차순
nums.sort(key=lambda x: (-cnt[x], x))

[1, 1, 1, 2, 2, 3]

Leave a comment