CODING TEST/memo

sort | sorted

마이구미2 2021. 7. 20. 16:42

sort | sorted

 

sort: 리스트를 정렬된 상태로 변경 (리스트만을 위한 메소드)

sorted: 이터러블 객체로부터 정렬된 리스트 생성 (내장 함수)

## sort
ls = [4, 2, 3, 5, 1]

ls.sort()
ls
#result: [1, 2, 3, 4, 5]


## sorted
ls = [3, 2, 5, 1, 4]

sorted(ls)
#result: [1, 2, 3, 4, 5]
ls
#result: [3, 2, 5, 1, 4]

 

 

sorted 의 key 매개변수

객체의 데이터 중 특정 데이터를 기준으로 정렬하기 위해

key 매개변수로 각 요소에 대하여 적용되는 함수 지정 가능

ls = [(1, 2), (0, 1), (5, 1), (5, 2), (3, 0)]


## 매개변수 없는 경우, 리스트 아이템의 각 요소 순서대로 정렬

sorted(ls)
#result: [(0, 1), (1, 2), (3, 0), (5, 1), (5, 2)]


## key 인자에 함수를 넘겨주면 해당 함수의 반환값을 비교하여 순서대로 정렬
# 비교 함수를 통해 비교할 아이템의 요소 반환
# 아래의 예시에서는 익명 함수(lambda) 사용

sorted(ls, key = lambda x : x[0])
#result: [(0, 1), (1, 2), (3, 0), (5, 1), (5, 2)]

sorted(ls, key = lambda x : x[1])
#result: [(3, 0), (0, 1), (5, 1), (1, 2), (5, 2)]

# 비교할 아이템의 요소가 복수 개일경우, 튜플로 순서 지정
# - : 현재 정렬 기준과 반대

sorted(ls, key = lambda x : (x[0], -x[1]))
#result: [(0, 1), (1, 2), (3, 0), (5, 2), (5, 1)]

 

reverse 매개변수

## sort
ls = [4, 2, 3, 5, 1]

ls.sort(reverse = True)
ls
#result: [5, 4, 3, 2, 1]


## sorted 
ls = [(1, 2), (0, 1), (5, 1), (5, 2), (3, 0)]

sorted(ls, key = lambda x : x[1], reverse = True)
#result: [(1, 2), (5, 2), (0, 1), (5, 1), (3, 0)]

sorted(ls, key = lambda x : (-x[0], x[1]), reverse = True)
#result: [(0, 1), (1, 2), (3, 0), (5, 2), (5, 1)]

 

sorted 를 이용한 dictionary 정렬

 

di = {'d':5, 'c': 1, 'e': 2, 'a': 4, 'b': 3}

## key 기준 정렬
sorted(di)
#result: ['a', 'b', 'c', 'd', 'e']

sorted(di.keys())
#result: ['a', 'b', 'c', 'd', 'e']

sorted(di.items())
#result: [('a', 4), ('b', 3), ('c', 1), ('d', 5), ('e', 2)]


## value 기준 정렬
sorted(di, key = lambda x : di[x])
#result: ['c', 'e', 'b', 'a', 'd']

sorted(di.items(), key = lambda x : x[1])
#result: [('c', 1), ('e', 2), ('b', 3), ('a', 4), ('d', 5)]

dict(sorted(di.items(), key = lambda x : x[1]))
#result: {'c': 1, 'e': 2, 'b': 3, 'a': 4, 'd': 5}