sort()
sort()는 리스트 객체의 내장 함수로, 이를 이용하면 별도의 정렬된 리스트가 반환되지 않고 내부 원소가 바로 저장된다.
arr = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
arr.sort()
print(arr)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
sorted()
파이썬은 기본 정렬 라이브러리인 sorted() 함수를 제공한다.
sorted()는 퀵 정렬과 동작 방식이 비슷한 병합 정렬을 기반으로 만들어졌는데,
병합 정렬은 일반적으로 퀵 정렬보다 느리지만 최악의 경우에도 시간 복잡도 $O(nlogn)$을 보장한다는 특징이 있다.
이러한 sorted() 함수는 리스트, 딕셔너리 자료형 등을 입력받아서 정렬된 결과를 출력한다.
집합 자료형이나 딕셔너리 자료형을 입력받아도, 결과는 리스트 자료형이다.
arr = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
result = sorted(arr)
print(result)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
참고
sort()나 sorted()를 이용할 떄는 key 매개변수를 입력으로 받을 수 있다.
key 값으로는 하나의 함수가 들어가야 하며, 이는 정렬의 기준이 된다.
arr = [('바나나', 2), ('사과', 5), ('당근', 3)]
def setting(data):
return data[1]
result = sorted(arr, key=setting)
print(result)
# [('바나나', 2), ('당근', 3), ('사과', 5)]
아래와 같이 람다로 작성할 수도 있다.
arr = [('바나나', 2), ('사과', 5), ('당근', 3)]
result = sorted(arr, key=lambda x:x[1])
print(result)
# [('바나나', 2), ('당근', 3), ('사과', 5)]
딕셔너리인 경우에도 동일하게 적용할 수 있다.
footballers_goals = {
'Eusebio': 120,
'Cruyff': 104,
'Pele': 150,
'Ronaldo': 132,
'Messi': 125
}
sorted_footballers_by_goals = sorted(footballers_goals.items(), key=lambda x:x[1]) # 키는 0, 값은 1
print(sorted_footballers_by_goals)
# [('Cruyff', 104), ('Eusebio', 120), ('Messi', 125), ('Ronaldo', 132), ('Pele', 150)]
이렇게도 출력이 가능하다!
(값의 오름차순으로 정렬)
footballers_goals = {
'Eusebio': 120,
'Cruyff': 104,
'Pele': 150,
'Ronaldo': 132,
'Messi': 125
}
for k, v in sorted(footballers_goals.items(), key=lambda x:x[1]):
print(k, ": ", v)
'''
Cruyff : 104
Eusebio : 120
Messi : 125
Ronaldo : 132
Pele : 150
'''
(값의 내림차순으로 정렬)
footballers_goals = {
'Eusebio': 120,
'Cruyff': 104,
'Pele': 150,
'Ronaldo': 132,
'Messi': 125
}
for k, v in sorted(footballers_goals.items(), key=lambda x:x[1], reverse=True):
print(k, ": ", v)
'''
Pele : 150
Ronaldo : 132
Messi : 125
Eusebio : 120
Cruyff : 104
'''
반응형