[파이썬] sort / sorted

ChaeYuuu·2024년 7월 14일

Python

목록 보기
1/2
post-thumbnail

💻 sort

: 리스트명.sort( ) 형식으로 리스트형의 메소드

  • 리스트 원본 자체를 수정
    -> 원본 리스트 자체를 바꾸는 것이기 때문에 정렬된 값을 반환하지 않음
  • 기본적으로 오름차순 정렬
a1 = [3,2,1]
print('정렬 전: ', a1)

a1.sort()
print('정렬 후: ', a1)

a2 = a1.sort()
print('정렬된 값이 반환되지 않음: ', a2)
정렬 전: [3,2,1]
정렬 후: [1,2,3]
정렬된 값이 반환되지 않음: None

💻 sorted

: sorted(리스트명)으로 파이썬의 내장함수

  • 기존 리스트는 유지하고 새로운 리스트를 반환
  • 기본적으로 오름차순 정렬
a1 = [3,2,1]
print('정렬 전: ', a1)

a2 = sorted(a1)
print('정렬 후: ', a2)

print('원본 리스트의 값은 유지 - a1 : ', a1)
print('정렬된 값이 반환 - a2 : ', a2)
정렬 전: [3,2,1]
정렬 후: [1,2,3]
원본 리스트의 값은 유지 - a1 : [3,2,1]
정렬된 값이 반환 - a2 : [1,2,3]

💻 파이썬에서의 정렬

앞서 살펴본 sort와 sorted는 기본적으로 오름차순으로 정렬된다. sort와 sorted 모두 keyreverse를 통해 원하는 순서로 정렬할 수 있다.
(sort와 sorted에서 key와 reverse를 통해 정렬하는 방법은 같으니 예시를 들 때에는 sort를 사용하도록 하겠다.)

1. 기본 정렬 (오름차순 / 내림차순)

내림차순으로 정렬하고 싶을 때에는 'reverse' 값을 'True' 로 설정해주면 된다. 기본 값이 오름차순 정렬이기 때문에 오름차순 정렬 시에는 생략 가능하다.

a1 = [3,1,2]

a1.sort()
print('오름차순 정렬: ', a1)

a1.sort(reverse=True)
print('내림차순 정렬: ', a1)
오름차순 정렬: [1,2,3]
내림차순 정렬: [3,2,1]

2. 2차원 정렬

key의 값을 지정해줌으로써 배열 내에서 원하는 값을 통해 정렬할 수 있다
+) key 값을 따로 지정하지 않으면 기본적으로 오름차순 정렬을 해준다.

a1 = [[1, 1], [3, 4], [2, 5], [1, 3]] 라는 배열로 예시를 들어 살펴보도록 하겠다.

- 첫번째 인덱스를 기준으로 정렬

: 첫번째 인덱스가 동일한 경우, 두 번째 인덱스를 기준으로 오름차순 정렬을 해준다.

a1 = [[1, 1], [3, 4], [2, 5], [1, 3]]

a1.sort(key=lambda x:x[0])
print('리스트의 첫번째 인덱스를 기준으로 오름차순 정렬: ', a1)
리스트의 첫번째 인덱스를 기준으로 오름차순 정렬: [[1,1],[1,3],[2,5],[3,4]]
- 두번째 인덱스를 기준으로 정렬

: 두번째 인덱스가 동일한 경우, 첫번째 인덱스를 기준으로 오름차순 정렬을 해준다.

a1 = [[1, 1], [3, 4], [2, 5], [1, 3]]

a1.sort(key=lambda x:x[1])
print('리스트의 두 번째 인덱스를 기준으로 오름차순 정렬: ', a1)
리스트의 두 번째 인덱스를 기준으로 오름차순 정렬: [[1,1],[1,3],[3,4],[2,5]]

만약, 두 번째 인덱스가 동일할 때 첫번째 인덱스를 정렬하는 기준을 정하고 싶다면 추가로 값을 적어주면 된다.

a1 = [[1, 1], [3, 4], [2, 5], [1, 3]]

a1.sort(key=lambda x: (x[1], -x[0]))
print('두 번째 인덱스를 기준으로 오름차순 정렬, 동일한 경우 첫번째는 내림차순 정렬: ', a1)
두 번째 인덱스를 기준으로 오름차순 정렬, 동일한 경우 첫번째는 내림차순 정렬
정렬: [[1,3],[1,1],[3,4],[2,5]]

- - - - - -
a1 = [[1, 1], [3, 4], [2, 5], [1, 3]]

a1.sort(key=lambda x: (x[1], x[0]))
print('두 번째 인덱스를 기준으로 오름차순 정렬, 동일한 경우 첫번째도 오름차순 정렬:', a1)
두 번째 인덱스를 기준으로 오름차순 정렬, 동일한 경우 첫번째도 오름차순 정렬
:[[1,1],[1,3],[3,4],[2,5]]
profile
아무것도 머르게떠염

0개의 댓글