리스트를 정렬하는 방법에는 2가지가 있다.
리스트 정렬하기
1. sort( *, key=None, reverse=False)
- key : 인자 하나를 받아들이는 함수를 지정. 각 리스트 요소에서 비교 키를 추출하는데 사용. 리스트의 각 항목에 해당하는 키는 한 번만 계산된 후 전체 정렬 프로세스에 사용.
- reverse : False이면 오름차순, True이면 내림차순으로 정렬.
- 특징 : 리스트 자체의 항목들 순서를 정렬 (인스턴스 반환X : None)
- 오름차순 정렬 ( reverse = False )
a = [1, 2, 3, 4, 5]
a.sort()
print(a) # 출력 : [1, 2, 3, 4, 5]
print(a.sort()) # 출력 : None
- 내림차순 정렬 ( reverse = True)
a = [1, 2, 3, 4, 5]
a.sort(reverse=True)
print(a) # 출력 : [5, 4, 3, 2, 1]
- key를 사용하여 정렬
b = ["It", "is", "a", "famous", "attraction", "in", "Bangkok"]
b.sort(key=str.lower)
print(b) # 출력 : ['a', 'attraction', 'Bangkok', 'famous', 'in', 'is', 'It']
- 대소문자를 구분하지 않는 문자열 정렬 (abc 순 정렬)
2. sorted(iterable , /, *, key=None, reverse=False)
- key : iterable의 각 요소들로부터 비교 키를 추출하는 데 사용.
- reverse : False이면 오름차순, True이면 내림차순으로 정렬.
- 특징 : iterable의 항목들로 정렬된 리스트를 반환.
* iterable 객체 : 반복 가능한 객체. 대표적인 iterable한 타입 (list, dict, set, str, bytes, tuple, range)
- 오름차순 정렬 ( reverse = False )
a = [1, 2, 3, 4, 5]
print(sorted(a)) # 출력 : [1, 2, 3, 4, 5]
- 내림차순 정렬 ( reverse = True )
a = [1, 2, 3, 4, 5]
print(sorted(a, reverse=True)) # 출력 : [5, 4, 3, 2, 1]
나머지는 생략...
다중 리스트 정렬하기
- key를 사용하여 정렬
n번째 인덱스 기준 오름차순 정렬
- 0번째 인덱스 기준 오름차순
a = [[5, 20], [7, 47], [2, 14], [2, 3]]
a.sort(key=lambda x: x[0])
print(a) # 출력 : [[2, 14], [2, 3], [5, 20], [7, 47]]
- 0번째 기준으로 오름차순 정렬을 했기 때문에 [2, 14], [2, 3] ... 순으로 정렬된 것을 확인할 수 있다.
2개 이상의 인덱스 기준 오름차순 정렬
- 2개 이상의 인덱스를 이용하여 정렬할 때는 괄호를 사용하여 튜플 형태로 만들어준다.
- 0번째 인덱스 오름차순, 1번째 인덱스 오름차순 정렬
a = [[5, 20], [7, 47], [2, 14], [2, 3]]
a.sort(key=lambda x: (x[0], x[1]))
print(a) # 출력 : [[2, 3], [2, 14], [5, 20], [7, 47]]
- 0번째 인덱스 오름차순, 1번째 인덱스 오름차순, 2번째 인덱스 오름차순 정렬
b = [[3, 1, 4], [1, 2, 3], [4, 1, 5], [1, 2, 2]]
b.sort(key=lambda x: (x[0], x[1], x[2]))
print(b) # 출력 : [[1, 2, 2], [1, 2, 3], [3, 1, 4], [4, 1, 5]]
n번째 인덱스 기준 내림차순 정렬
- 내림차순할 때는 내림차순할 인덱스 앞에 마이너스(-) 기호를 붙여준다.
- 0번째 인덱스 내림차순, 1번째 인덱스 오름차순 정렬
a = [[5, 20], [7, 47], [2, 14], [2, 3]]
a.sort(key=lambda x: (-x[0], x[1]))
print(a) # 출력 : [[7, 47], [5, 20], [2, 3], [2, 14]]
- 0번째 인덱스 오름차순, 1번째 인덱스 내림차순 정렬
a = [[5, 20], [7, 47], [2, 14], [2, 3]]
a.sort(key=lambda x: (x[0], -x[1]))
print(a) # 출력 : [[2, 14], [2, 3], [5, 20], [7, 47]]
- 0번째 인덱스 내림차순, 1번째 인덱스 내림차순 정렬
a = [[5, 20], [7, 47], [2, 14], [2, 3]]
a.sort(key=lambda x: (-x[0], -x[1]))
print(a) # 출력 : [[7, 47], [5, 20], [2, 14], [2, 3]]
회고
- 2차원 리스트 정렬은 관련 문서를 찾는 것이 어려워서 다른 분들의 블로그 글을 참고하여 정리했다.
- 코딩테스트 문제를 풀면서 헤갈렸던 부분들을 이번에 정리하게 되었다.
Ref.
1. 파이썬 공식 문서 (리스트) / https://docs.python.org/ko/3/tutorial/datastructures.html
2. 파이썬 공식 문서 (내장형) / https://docs.python.org/ko/3/library/stdtypes.html#sequence-types-list-tuple-range
3. 파이썬 공식 문서 (정렬) / https://docs.python.org/ko/3/howto/sorting.html#sortinghowto
4. 파이썬 공식 문서 (내장 함수) / https://docs.python.org/ko/3/library/functions.html#sorted
5. iterable / https://wikidocs.net/16068
6. 2차원 리스트 정렬 / https://haesoo9410.tistory.com/193
7. 2차원 리스트 정렬 / https://gaga.tistory.com/140
* 잘못된 부분에 대해 댓글 남겨주시면 감사하겠습니다! 😀
'Python' 카테고리의 다른 글
[Python/Selenium] 네이버 로그인 (0) | 2023.12.03 |
---|---|
[Python] bisect - 배열 이진 분할 알고리즘 (0) | 2023.05.25 |
[Python] map에 대하여 (0) | 2023.02.21 |
[Python] 리스트 컴프리헨션 (0) | 2023.02.13 |
[Python/Pandas] 점 개수 세기 (0) | 2022.12.04 |