728x90
문제정의
선거 후보자들의 득표수를 기록한 list 가 있다고 가정하자.
list에는 (득표수, 후보자번호) 형태의 tuple 이 요소로 저장된다.
EX) [(5,3),(5,2),(10,99),(10,1)]
위의 후보자 투표 합산 결과에서,
득표수가 많은 순서대로 출력하라. 만약, 득표수가 같은 후보가 있다면 빠른 번호를 가진 후보자를 먼저 출력하라
만약 단순 sort 로 정렬하게 된다면, tuple 의 첫번째 요소의 오름차순순으로 정렬되게 된다.
[(5, 2), (5, 3), (10, 1), (10, 99)]
구해야 하는건, 많은 득표를 받은 후보를 번호의 오름차순순으로 정렬해야 한다.
즉, key 1 -> 내림차순 && key 2 -> 오름차순
으로 정렬해야 한다!!
lambda 식을 이용해 2번의 정렬을 이어서 한다.
votes = [(5,3),(5,2),(10,99),(10,1)]
votes.sort(key= lambda x: x[1])
votes.sort(key= lambda x: x[0], reverse=True)
print(votes)
결과 : [(10, 1), (10, 99), (5, 2), (5, 3)]
원하는 결과가 나왔다. 여기서 주의 해야할 건, reverse 로 돌려야하는 key 를 나중에 돌려야 한다는 것이다.
위 두 sort 의 순서가 반대라면 (10,99) 가 (5,*) 인 2개 보다 나중에 출력된다.
'프로그래밍 > 기억노트' 카테고리의 다른 글
[python] 2차원 리스트 90도 돌리기 (0) | 2020.08.31 |
---|---|
[python] 주어진 수가 소수인지 판별하기 (0) | 2020.08.26 |
[python] 입력받은 문자열 개행 지우기와 그 중요성 (0) | 2020.08.15 |
[python] 개행/줄바꿈 없이 print 하기 (0) | 2020.08.11 |
[python] 파이썬 공백 구분해 정수 입력 받기 (0) | 2020.08.07 |