언어/PYTHON

[Python] 파이썬 lambda(익명함수) 함수로 정렬하기

sebinChu 2023. 1. 18. 18:12

파이썬 정렬

정렬 메소드인 sort()와 함수 sorted()는 디폴트 값이 오름차순이고, 내림차순으로 정렬을 하기 위해서 reverse 인자를 추가한다.

 

arr = [10, 3, 4, 2, 100]
arr.sort(reverse = True)
print(arr)
# [100, 10, 4, 3, 2]

 

 

arr = [10, 3, 4, 2, 100]
arr.sorted(arr, reversed = True)
print(arr)
# [100, 10, 4, 3, 2]

 

* reversed 인자 이외에도 [::-1]을 이용하여 정렬할 수 있다.

 

 


lambda(익명함수)

어떤 리스트를 정렬하기 위해서는 다양한 기준을 활용할 수 있는데, reversed 인자처럼 key 인자를 활용하면 된다.

여기서 lambda(익명 함수)가 key에 들어갈 값이다.

 

arr = [리스트 원소들...]
arr.sort(key = lambda 변수 : 정렬 조건)
arr = sorted(key = lambda 변수 : 정렬 조건)

 

변수는 우리가 흔히 변수명을 지정하듯이 값에 맞는 키워드를 넣어서 지정하면된다. 보통 x, a 등을 사용한다.

 


lambda 예시

이제 lambda(익명함수)를 활용하여 문자열을 정렬해보자. 문자열의 오름차순 정렬은 사전순(a,b,c...) 정렬과 같다.

 

arr = ['a', 'opqrs', 'b','xyz']
arr = sorted(arr, key = lambda x: x)
print(arr) 
# ['a', 'b', 'opqrs', 'xyz']

 

 

문자열 길이를 기준으로 정렬할 수도 있다. lambda 함수의 정렬 조건에 문자열 길이를 설정해보자.

 

arr = ['a', 'opqrs', 'b','xyz']
arr = sorted(arr, key = lambda x: len(x))
print(arr) 
# ['a', 'b', 'xyz', 'opqrs']

 


기준이 여러 개일 때의 lambda

 

정렬 기준은 다양한 기준이, 또 여러개의 기준이 올 수 있다.

이때 기준을 작성한 순서대로 중요도를 나눈다. lambda 변수: [1순위 조건, 2순위 조건,...]이다.

 

arr = ['a', 'opqrs', 'b','xyz']
arr = sorted(arr, key = lambda s:[len(s),ord(s[0])])
print(arr) 
# ['a', 'b', 'xyz', 'opqrs']

 

  1. 문자열 길이(작은값 순서)
  2. 아스키코드 값으로 정렬하면 결과는 위와 같다.
  • 분명 opqrs의 s[0]이 아스키 코드값이 더 작지만, 기준의 1순위가 문자열 길이이기 때문에, 위와 같은 결과를 출력한다.
  • 여러개의 기준을 사용할 때에는 [조건1, 조건2,...] 형태로 사용해야 한다는 점, lambda 변수로 정한 변수명을 사용해야 한다는 점을 주의해야 한다.