Sorted by key
정렬을 하다 정렬 전의 인덱스를 역으로 찾아야 하는 경우가 생겼습니다.
만일 정렬을 통해 최솟값이 맨 처음으로 왔다면 그 최솟값은 기존 리스트에서 어떤 인덱스에 있었을까요?
리스트를 다루는 유용한 기능인 sorted의 key를 통해서 이에 대한 방법을 설명하겠습니다.
이 방법은 메모리를 추가적으로 사용하기 때문에 최선의 방법이라고 할 수 없을 것 같습니다.
# 성적과 그에 해당하는 사람들의 수를 두 개의 리스트에 각각 담았다고 합시다.
Score_of_people = ["A0", "C0", "B0", "F", "A+"]
Number_of_people = [10, 40, 30, 20, 50]
|
두 개의 리스트를 합친 리스트를 만듭니다.
ALL 이라고 별칭을 하겠습니다. 리스트의 원소는 튜플 타입입니다.
# 1. 먼저 편의를 위해 리스트 별칭을 해주고 리스트를 합쳐줍니다.
S = Score_of_people
N = Number_of_people
ALL1 = [ ( S[ i ], N [ i ] ) for i in range( len(S) ) ]
PRINT ----------------------------------------------------------
ALL1 >>> [ ('A0', 10), ('C0', 40), ('B0', 30), ('F0', 20), ('A+', 50) ]
|
이렇게 두 개의 원소를 모두 담고 있는 새로운 리스트를 생성하고
튜플의 원소를 비교해서 정렬을 할 수 있습니다.
따라서 두 가지 정렬이 가능합니다.
1. Score A, B, C, F 를 정렬한다.
2. Number 10, 40, 30, 20 을 정렬한다.
1번의 경우가 key 1 에 해당하고 2번이 key 2 에 해당합니다.
ALL2 = sorted(ALL1, key = lambda x: x[0])
ALL3 = sorted(ALL1, key = lambda x: x[1])
PRINT ----------------------------------------------------------
ALL2 >>> sorted by key 0 Score [('A+', 50), ('A0', 10), ('B0', 30), ('C0', 40), ('F0', 20)]
ALL3 >>> sorted by key 1 Number [('A0', 10), ('F0', 20), ('B0', 30), ('C0', 40), ('A+', 50)]
|
sorted(LST, key = lamda x: x[?] ) 를 통해서 Tuple의 인덱스에 대한 비교로 정렬을 할 수 있습니다.
* 주의사항 : sorted 함수는 리스트를 정렬해주지만, 정확히 말하면 정렬된 리스트를 반환해 주는 함수입니다.
이 방법을 통해서 기존 인덱스를 참조하는 정렬을 만들 수 있습니다.
# INDEX PROBLEM
Mylst = [20,30,40,10,20,30,30]
Mylst = [ (Mylst[i], i) for i in range( len(Mylst) ) ]
Mylst = sorted(Mylst, key=lambda x: x[0])
print("With Index before sortd ", Mylst)
Console ----------------------------------------------------------
With Index before sortd [(10, 3), (20, 0), (20, 4), (30, 1), (30, 5), (30, 6), (40, 2)]
|
Mylst = [20,30,40,10,20,30,30]
[(10, 3), (20, 0), (20, 4), (30, 1), (30, 5), (30, 6), (40, 2)]
10 -- > 3번 째
20 -- > 0번 째
기타 등등...
끝.
'프로그래밍' 카테고리의 다른 글
[백준 2805 파이썬] 나무자르기 (0) | 2020.02.23 |
---|---|
[백준 1904 파이썬] 01타일 (0) | 2020.02.23 |
[Python][Algorithm] 조합 Combination (0) | 2020.01.26 |
[Python] Operator overloading (0) | 2020.01.23 |
[Python] Efficiency 1 - String Concatenatio (0) | 2020.01.20 |