본문 바로가기
Python

[Python] sort, sorted 차이, 사용 방법

by 고체물리학 2022. 3. 25.

요즘 알고리즘 공부를 하고 있다 보니 내장 함수의 중요성을 뼈저리게 깨닫게 되었다

배열 형식으로 주어진 문제는 거의 대부분 정렬만 잘해도 풀 수 있는데 파이썬에서는 list.sort(), sorted(list)를 사용한다

 

sort()
  • 원본 리스트의 순서를 변경(원본에 영향을 끼침)
  • 리턴 값 None
  • 리스트형의 메소드

사용 방법 - list.sort(self, key, reverse)

 

l1 = [1,3,5,4,6,2]
print('정렬 전', l1)

l2 = l1.sort()
print('정렬 후', l1)

print('리턴값', l2)

l1.sort(reverse=True) #reverse를 True로 설정하여 내림차순 적용
print('내림차순', l1)

 

key, reverse에 아무 조건을 달지 않으면 오름차순으로 정렬된다

sort() 함수는 리턴 값이 없기 때문에 l2는 None으로 출력

 

 


sorted()
  • 정렬된 새로운 리스트를 반환( 원본에 영향을 끼치지 않음)
  • 리턴 값은 정렬된 새로운 리스트로 받을 수 있다
  • 모든 iterable에 적용됨(list, tuple, dict, 문자열)
  • 내장 함수

사용 방법 - sorted(iterable, key, reverse)

 

 

l1 = [1,3,5,4,6,2]
l2 = sorted(l1)
print('정렬 전', l1)
print('정렬 후', l2) #원본 리스트는 영향x 새로운 리스트에 정렬
print('리턴값', l2)
l2 = sorted(l1,reverse=True)
print('내림차순', l2)

 

sort()와 달리 정렬된 값은 새로운 리스트에 반환되어 저장하기 때문에

l2를 출력해야 정렬된 리스트를 출력할 수 있다

 

반응형
key를 사용하여 정렬

 

1. len을 사용하여 리스트 배열의 길이 기준으로 정렬

l1 = ['11112211','abc','512222','24','1262','1']
l2 = ['11112211','abc','512222','24','1262','1']
print('정렬 전', l1)
print('-------------------------------------------------------------------------')
l1.sort(key=len)
print('sort 정렬 후', l1)
print('sorted 정렬 후', sorted(l2,key=len))
print('-------------------------------------------------------------------------')
l1.sort(key=len,reverse=True)
print('sort 내림차순 정렬 후', l1)
print('sorted 내림차순 정렬 후', sorted(l2,key=len,reverse=True))

 

 

2. lambda 사용

key=lambda x:x [0]를 사용하여 2차원 배열의 0번째 열을 기준으로 정렬

l1 =[[1,2],[0,1],[3,4],[2,3],[4,5],[5,6]]
l2 =[[1,2],[0,1],[3,4],[2,3],[4,5],[5,6]]
print('정렬 전',l1)

l1.sort(key=lambda x:x[0])
print('sort 정렬',l1)

print('sorted 정렬',sorted(l2,key=lambda x:x[0]))
print('-------------------------------------------------')
l1.sort(key=lambda x:-x[0])
print('sort 정렬',l1)

print('sorted 정렬',sorted(l2,key=lambda x:-x[0]))

 

reverse 대신 x [0] 앞에 -를 붙여주어도 반대로 정렬된다

 

정렬할 아이템이 여러 개인 경우

 

l1 =[[1,3],[1,6],[3,5],[2,7],[1,4],[5,1]]
l2 =[[1,3],[1,6],[3,5],[2,7],[1,4],[5,1]]
print('x[0]먼저 정렬한 뒤에 x[1] 오름차순으로 정렬')
print('정렬 전',l1)

l1.sort(key=lambda x:(x[0],x[1]))
print('sort 정렬',l1)

print('sorted 정렬',sorted(l2,key=lambda x:(x[0],x[1])))
print('---------------------------------------------------------------')
print('x[0]먼저 정렬한 뒤에 x[1] 내림차순으로 정렬')

l1.sort(key=lambda x:(x[0],-x[1]))
print('sort 정렬',l1)

print('sorted 정렬',sorted(l2,key=lambda x:(x[0],-x[1])))

 

반응형

댓글