영호
[Python] 파이썬 정렬, lambda사용 본문
개요
알고리즘에서 유용하게 사용되는 정렬 함수에 대해서 정리를 해보겠습니다
Python에는 sort()
와 sorted()
함수가 존재한다. 이제 둘의 차이점과 옵션들에 대해 알아보겠습니다
순서
- sort()
- sorted()
- parameters - key, reverse
- lambda
1. sort()
sort()
는 원본 자체를 정렬시켜 줍니다.
sort_list = [1,5,23,5,2343,124]
sort_list.sort()
print(sort_list)
>>> [1, 5, 5, 23, 124, 2343]
- 위의 코드에서 볼 수 있듯, sort_list자체적으로 정렬이 수행됐습니다.
2. sorted()
sorted()
는 원본을 변형시키지 않고 새로운 list를 반환합니다.
sorted_list = [1,5,23,5,2343,124]
result = sorted(sorted_list)
print("result: ", result)
print("원본: ",sorted_list)
>>> result: [1, 5, 5, 23, 124, 2343]
>>> 원본: [1, 5, 23, 5, 2343, 124]
- 이처럼 기존 list인 sorted_list는 그대로 있고 새롭게 정렬된 list를 반환받은 result는 정렬이 된 것을 알 수 있습니다.
3.1 reverse
- Python의 정렬 기능은 기본적으로 오름차순을 제공한다. 하지만 우리는 내림차순으로 정렬된 list가 필요한 경우가 있다. 이럴 때는 아주 간단하게 내림차순으로 정렬된 list를 얻을 수 있습니다.
- 위 사진을 보면 sort()에는 2가지 parameter가 있는데 key, reverse가 있다. 이 중 내림차순에 필요한 parameter는 reverse다. reverse = True로 주게 되면 내림차순으로 정렬된 list를 얻을 수 있습니다.
sort_list = [1,5,23,5,2343,124]
sort_list.sort(reverse=True)
print(sort_list)
>>> [2343, 124, 23, 5, 5, 1]
sorted_list = [1,5,23,5,2343,124]
result = sorted(sorted_list, reverse=True)
print(result)
>>> [2343, 124, 23, 5, 5, 1]
3.2 key
- 정렬 조건을 설정할 함수를 넣을 수 있다. 물론 lambda 함수도 가능합니다.
- 문자열로 구성된 list를 글자 수를 기준으로 정렬하고 싶으면 `key = len`로 하면 됩니다.
str_list = ["세글자", "두울", "일", "네에글자"]
str_list.sort(key=len)
>>> ['일', '두울', '세글자', '네에글자']
4.1 lambda를 이용한 학생들의 성적 정렬
score_list = [
("A학생", 60),
("B학생", 80),
("C학생", 50),
("D학생", 70),
]
score_list.sort(key = lambda x : -x[1])
print(score_list)
>>> [('B학생', 80), ('D학생', 70), ('A학생', 60), ('C학생', 50)]
- lambda에서 앞에 "-"를 붙이게 되면 reverse=True와 같은 효과를 가질 수 있습니다.
4.2 lambda를 이용한 다중 조건 정렬
- 같은 성적의 경우 이름순으로 정렬을 하는 코드입니다.
score_list = [
("A학생", 60),
("B학생", 80),
("C학생", 50),
("D학생", 70),
("E학생", 70),
]
score_list.sort(key = lambda x : (-x[1], x[0]))
print(score_list)
>>> [('B학생', 80), ('D학생', 70), ('E학생', 70), ('A학생', 60), ('C학생', 50)]
- 성적이 같은 D, E학생의 경우 이름순으로 다시 정렬되는 것을 볼 수 있습니다.
'Language > Python' 카테고리의 다른 글
[Python] 조합, 순열 (combinations, permutations) (0) | 2022.06.04 |
---|---|
[Python] 문자열 뒤집기 - reverse(), s[::-1] (0) | 2022.06.03 |
[Python] Set (0) | 2022.06.03 |
[Python] defaultdict란? (0) | 2022.05.17 |
Comments