알고리즘
코딩테스트 필수 파이썬 Sort 메소드 정리!
코딩균
2022. 3. 7. 22:25
정렬
sort()
list에 대하여 정렬 메소드를 사용할 수 있다
해당 메소드는 list의 내장 메소드로 in-place 방식으로 정렬을 시켜준다 즉, 대상 list 자체를 바꿔버린다
return 값은 None
- 리스트.sort(reverse=True) : default는 오름차순이며, reverse가 True인 경우에는 내림차순으로 정렬됨
- 리스트.sort(key=?) : key에 저장된 메소드의 결과를 가지고 정렬함
sorted()
모든 iterable에 대하여 정렬을 만드는 iterable의 내장 메소드
즉, 원본을 변경하지 않고 새로운 정렬된 이터러블을 반환
위의 sort()는 list에만 적용되지만 sorted는 모든 iterable에 적용된다
- sorted(이터러블, reverse=True) : default는 오름차순이며, reverse가 True인 경우에는 내림차순으로 정렬된 이터러블을 반환
- sorted(이터러블, key=?) : key에 저장된 메소드의 결과를 가지고 정렬한 이터러블을 반환
labmda와 key를 이용한 sort
iterable 객체의 요소에 대해 정렬을 할 수 있음
# 첫번째 인자를 기준으로 정렬 후, 첫번째 인자 중에서 같은 것이 있다면 두번째 인자를 기준으로 정렬
a = [(1,2), (2, 2), (2, 1)]
result = sorted(a, key= lambda a : (a[0], a[1]))
print(result)
# 결과 : [(1, 2), (2, 1), (2, 2)]
클래스 객체를 기반으로 정렬하기
class User:
def __init__(self, id, pwd):
self.id = id
self.pwd = pwd
user_list = [
User('id2', '1234'),
User('id1', '2345')
]
# iterable 객체이기 때문에 sorted 사용
result = sorted(user_list, key = lambda u : u.id)
operator 모듈 메소드를 이용한 정렬
엑세스 메소드를 빠르게 만드는 편리함수를 파이썬이 제공
- itemgetter() : 해당 iterable 객체의 요소를 가져온다
- attrgetter() : class의 attribute 요소(멤버변수)를 가져온다
- methodcaller() : class의 method 를 적용한 값을 가져온다
a = [(1,2), (2, 2), (2, 1)]
a.sort(key = itemgetter(0, 1))
# idx 0 요소를 우선적으로 정렬 후, idx 1 요소를 다음 우선순위로 정렬
print(a)
# 결과 : [(1, 2), (2, 1), (2, 2)]
class User:
def __init__(self, id, pwd):
self.id = id
self.pwd = pwd
user_list = [
User('id2', '1234'),
User('id1', '2345')
]
# iterable 객체이기 때문에 sorted 사용
result = sorted(user_list, key = attrgetter('id'))
# 멤버변수 id를 기준으로 정렬 - str값으로 넣어야함
Dictionary 딕셔너리 자료구조 정렬
딕셔너리를 튜플의 리스트로 변환 후 정렬
- items() : key와 value가 하나의 쌍으로 구성된 리스트를 return
dict = {1 : 1, 3 : 2, 2 : 2}
result = sorted(dict.items(), key=lambda a:(a[1], a[0]))
# idx 1번째 인자 값으로 먼저 정렬 후, 같은 요소에 대하여 idx 0번째 인자 값으로 정렬
print(result)
# 결과 : [(1, 1), (2, 2), (3, 2)]
만약 두개의 기준이 다른 경우
- a[1] 기준으로는 오름 차순
- a[0] 기준으로는 내림 차순
result = sorted(dict.items(), key=lambda a:(a[1], -a[0]))
기본 sort의 정책은 reverse가 없으므로 오름차순이르모
내림 차순할 a[0]에 마이너스를 붙여준다