sort(), sorted()

ddurru·2024년 12월 8일

sort(), sorted()

파이썬에서 리스트를 정렬 시, sort(), sorted()를 사용할 수 있다.
하지만 두 방식에는 차이가 존재하고, 이를 알아보고자 한다.

sort()

  • 리스트형 메소드
  • 기존의 리스트를 정렬 (modifies the list in-place)
  • 리스트 내에서만 정의될 수 있음
  • 리스트를 제자리에서 수정하며, 원래 목록이 필요없는 경우 효율적으로 사용 가능
    • 단, 리스트를 제자리에서 수정하기 때문에 새로운 리스트를 선언 후 print시 None 반환
a = [1, 5, 3, 8, 4]
a.sort()
print(a)    # [1, 3, 4, 5, 8]
# 결과가 정렬된 형태로 변경되어 저장 

A = [5, 4, 5, 9, 1]
A_sorted = A.sort()
print(A_sorted)
# None

sorted()

  • 파이썬 내장함수
  • 새로운 정렬된 리스트를 만들어냄
  • sort()는 리스트 요소에 대해서만 적용이 가능하지만 sorted() 함수는 모든 이터러블을 받아들임
    • 따라서, 여러 옵션을 통해 정렬 가능
b = [1, 5, 3, 8, 4]
print(sorted(b))    # [1, 3, 4, 5, 8]
print(b)    # [1, 5, 3, 8, 4]
# 리스트 b를 정렬한 리스트 반환

sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
# [1, 2, 3, 4, 5]

key 매개변수

  • abs: 절대값을 기준으로 정렬
  • len: 문자열의 길이를 기준으로 정렬
  • lower, upper: 소문자, 대문자 기준으로 정렬
  • lambda: key에는 1개의 비교 조건만 적용 가능하지만 2개의 조건을 한 번에 비교해야 한다면 lambda 함수를 통해서 이를 활용하여 하나의 비교 조건인 것처럼 묶어서 사용 가능

오름차순, 내림차순

  • 오름차순, 내림차순 정렬 시, reverse argument로 설정하면 반영 가능
    • reverse=True (내림차순)
    • default는 False (오름차순)
# sort()
c = [1, 5, 3, 8, 4]
c.sort()
print(c)# [1, 3, 4, 5, 8]
c.sort(reverse=True)
print(c)    # [8, 5, 4, 3, 1]

# sorted()
A = [1,3,5,2,1,6]
sorted_A = sorted(A, reverse=True)
print(sorted_A)
# [6,5,3,2,1,1]

2차원 배열 정렬

  • 행 기준 정렬
list = [[1,2], [1,3],[0,5],[5,1],[4,3]] 

print(sorted(list, key = lambda x:x[0])) 
# [[0, 5], [1, 2], [1, 3], [4, 3], [5, 1]]
print(sorted(list, key = lambda x:x[0], reverse = True)) 
# [[5, 1], [4, 3], [1, 2], [1, 3], [0, 5]]
  • 열 기준 정렬
list = [[1,2], [1,3],[0,5],[5,1],[4,3]] 

print(sorted(list, key = lambda x:x[1])) 
# [[5, 1], [1, 2], [1, 3], [4, 3], [0, 5]]
print(sorted(list, key = lambda x:x[1], reverse = True)) 
# [[0, 5], [1, 3], [4, 3], [1, 2], [5, 1]]
  • 다중 조건 정렬
list.sort(key = lambda x: (x[1], x[0])) # 두번째 값이 같을 경우 첫번째 값을 기준으로 오름차순 
list #[[5, 1], [1, 2], [1, 3], [4, 3], [0, 5]]
sorted(list, key=lambda x : (-x[0], x[1])) # 첫번째 값은 내림차순, 두번째 값은 오름차순
#[[5, 1], [4, 3], [1, 2], [1, 3], [0, 5]]
sorted(list, key=lambda x:-x[0]) # 첫번째 값을 오름차순
#[[5, 1], [4, 3], [1, 2], [1, 3], [0, 5]]

참고

  1. 파이썬 리스트 정렬, sort()와 sorted() 차이
  2. sort와 sorted 차이와 활용
  3. sort(), sorted() 완벽정리
  4. sorted(), sort(), key 사용법
profile
2024.04.15 ~

0개의 댓글