람다 (lambda)
lambda 매개변수 : 표현식
--------------------------
def 함수이름(매개변수):
return 결과
lambda 매개변수 : 결과
정렬
"-"를 붙여줄 경우 반대가 됨!
a = [값1, 값2, ...]
- sorted
오름 차순 : sorted(a, key = lambda x : x[0])
내림 차순 : sorted(a, key = lambda x : -x[0]) - sort
오름 차순 : a.sort(key = lambda x : x[0])
내림 차순 : a.sort(key = lambda x : -x[0])
인자가 2개일 경우 괄호로 묶어주며, 우선순위 순이다.
a.sort(key = lambda x : (x[0], x[1]))
arr = [[1,4], [3, 6], [5, 7], [4, 3]]
# 오름 차순(리스트의 첫번째값 기준으로)
arr.sort(key = lambda x : x[0])
# [[1, 4], [3, 6], [4, 3], [5, 7]]
# 내림 차순(리스트의 첫번째값 기준으로)
arr.sort(key = lambda x : -x[0])
# [[5, 7], [4, 3], [3, 6], [1, 4]]
# 오름 차순(우선 순위 1: 리스트의 첫번째값 기준, 우선 순위 2 : 리스트의 두번째값 기준)
arr.sort(key = lambda x: (x[0], x[1]))
# [[1, 4], [3, 6], [4, 3], [5, 7]]
# 오름 차순(우선 순위 1: 리스트의 두번째값 기준, 우선 순위 2 : 리스트의 첫번째값 기준)
arr.sort(key = lambda x: (x[1], x[0]))
# [[4, 3], [1, 4], [3, 6], [5, 7]]
# 리스트의 두번째 값 기준으로 오름차순 후, 첫번째 값 기준으로 오름차순
arr.sort(key = lambda x: x[1])
arr.sort(key = lambda x: x[0])
# [[4, 3], [1, 4], [3, 6], [5, 7]]
# [[1, 4], [3, 6], [4, 3], [5, 7]]
# 리스트의 첫번째 값 기준으로 오름차순 후, 두번째 값 기준으로 오름차순
arr.sort(key = lambda x: x[0])
arr.sort(key = lambda x: x[1])
# [[1, 4], [3, 6], [4, 3], [5, 7]]
# [[4, 3], [1, 4], [3, 6], [5, 7]]
초반 헷갈렸던 것
# 1
arr.sort(key = lambda x: (x[0], x[1]))
# 2
arr.sort(key = lambda x: x[1])
arr.sort(key = lambda x: x[0])
# 1번과 2번은 같은 값이 나옴 => 왜?
# 예시
arr = [[1, 5], [2, 4], [3, 3], [4, 2], [5, 1]]
# 1번을 할 경우
[[1, 5], [2, 4], [3, 3], [4, 2], [5, 1]] # 우선 순위가 리스트의 첫번째를 우선순위로 함
# 2번을 할 경우
[[5, 1], [4, 2], [3, 3], [2, 4], [1, 5]]
[[1, 5], [2, 4], [3, 3], [4, 2], [5, 1]]
두개의 인자를 기준으로 1번 정렬하는 것과 하나의 인자로 2번 정렬하는 것이 순서가 다른 이유
1번을 보면 우선순위가 리스트의 첫번째 값이 우선으로 되야한다. x[0]을 정렬 후 x[1]을 정렬하게 되면 결과값은 결국 x[1]이 우선순위로 정렬이 된다.
그렇기에 거꾸로 해줘야 1번과 같이 우선순위 순으로 정렬된다. (나는 뒤에서 부터 정렬한다고 생각하니 이해가 편했다.)
예시를 보고 왜 2번처럼 정렬을 2번 하나 생각할 수 있으나 리스트에 동일한 숫자가 있을 경우 문제가 되는 경우가 있다.
내가 만약 2차원 배열로 오름 차순 정렬을 하는데 아래와 같이 arr인 경우 리스트의 첫번째 값 기준으로만 정렬이 되면 [3, 3], [3, 2] 이 부분이 정렬되지 않는 문제가 발생하여 두번째 값 기준으로도 정렬이 필요하다.
arr = [[1, 5], [2, 4], [3, 3], [3, 2], [5, 1]]
arr.sort(key = lambda x: x[0])
# [[1, 5], [2, 4], [3, 3], [3, 2], [5, 1]]
참고
'프로그래밍 언어 > Python' 카테고리의 다른 글
[python] deque 활용법 (0) | 2023.04.25 |
---|---|
[python] 리스트 역순으로 반복문 실행하기 (0) | 2023.04.10 |
[python] 파이썬 문자열 정렬 (0) | 2023.03.17 |
[Python] 효율적인 문자열 붙이기 방법(String Concatenate) (0) | 2023.02.21 |
[python] 파이썬 round 함수 사사오입 원칙 (1) | 2023.01.10 |