영호

[Python] 파이썬 정렬, lambda사용 본문

Language/Python

[Python] 파이썬 정렬, lambda사용

0h0 2022. 5. 10. 21:34

개요

알고리즘에서 유용하게 사용되는 정렬 함수에 대해서 정리를 해보겠습니다
Python에는 sort()sorted() 함수가 존재한다. 이제 둘의 차이점과 옵션들에 대해 알아보겠습니다

순서

  1. sort()
  2. sorted()
  3. parameters - key, reverse
  4. 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-parameter
sort parameter

  • 위 사진을 보면 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