Language/Python

파이썬 sorted() 정렬 조건

innit 2022. 4. 22. 19:12

 

예를 들어, 튜플을 원소로 갖는 리스트를 sorted()로 정렬을 하게 되면 기본적으로 첫 번째 요소를 기준으로 정렬합니다.

만일 첫 번째 요소가 똑같은 값이 여러 개 있다면 자동으로 두 번째 요소를 기준으로 정렬합니다.

 

만일 두 번째 요소를 기준으로 먼저 정렬한 후, 첫 번째 요소를 정렬하고 싶다던가 등 정렬 조건을 바꾸고 싶다면 어떻게 해야 할까요?

아래 리스트 L을 다양한 방법으로 정렬해보겠습니다.

L = [(4,0), (4,3), (4,2), (3,2), (2,1), (1,0)]

 

 

1. 인자 없이 sorted() 사용하기

- 첫 번째 요소를 기준으로 정렬합니다.
- 첫 번째 요소가 같으면 두 번째 요소로 비교합니다.

ex1 = sorted(L)
print(ex1)    # [(1, 0), (2, 1), (3, 2), (4, 0), (4, 2), (4, 3)]

 

 

2. key인자에 lambda 함수를 넘겨주기

- key인자에 lambda 함수를 넘겨주면 반환값을 가지고 비교해 정렬합니다.
- 이 때, key로 전달되지 않은 요소에 대해선 정렬하지 않습니다.

ex2 = sorted(L, key = lambda x : x[0])
print(ex2)    # [(1, 0), (2, 1), (3, 2), (4, 0), (4, 3), (4, 2)]

ex3 = sorted(L, key = lambda x : x[1])
print(d)    # [(4, 0), (1, 0), (2, 1), (4, 2), (3, 2), (4, 3)]

 

 

3. lambda 함수에 다중 조건 넘겨주기

- 첫 번째 인자를 기준으로 오름차순 정렬을 먼저 한다.
- 그 결과를 가지고 두 번째 인자를 기준으로 내림차순 정렬합니다. (-를 붙이면 내림차순 정렬)

ex4 = sorted(L, key = lambda x : (x[0], -x[1]))
print(ex4)    # [(1, 0), (2, 1), (3, 2), (4, 3), (4, 2), (4, 0)]

 

 

 

 

728x90
반응형