반응형
문제
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때,
각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다.
예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
+
제한 조건 : 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞 쪽에 위치한다.
풀이
def solution(strings, n):
return sorted(strings, key=lambda x:(x[n], x))
: sorted함수를 활용해 정렬을 했고, 정렬 기준을 주기 위해 key 파라미터를 썼다. x[n]기준으로 정렬 후, 제한 조건도 반영하기 위해 전체적으로 정렬을 적용하는 x를 써주었다.
배운점
01 sort, sorted에 key인자 넣어 정렬 기준 정할 수 있다.
02 key 기준으로 정렬할 경우, 오직 key기준으로만 정렬한다. key이외 나머지 요소에 대해선 정렬되지 않는다.
03 lambda를 이용한 key 설정에서 튜플 넣어 정렬의 우선순위를 지정할 수 있다.
sorted
sorted(정렬할 데이터)
sorted(정렬할 데이터, reverse 파라미터)
sorted(정렬할 데이터, key 파라미터)
sorted(정렬할 데이터, key 파라미터, reverse 파라미터)
: 첫 번째 매개변수로 들어올 '정렬할 데이터'는 iterable한 데이터다. 이 데이터를 새로운 정렬된 리스트로 만들어 반환해주는 함수이다.
- key 옵션 (key 파라미터) : 어떤 것을 기준으로 정렬할 것인가? 에 대한 기준이다. 즉, key값을 기준으로 비교해 정렬하겠다는 것. sorted(~~, key = 뭐뭐)로 입력하게 되면 해당 키를 기준으로 정렬하여 반환한다.
- key = lambda x : : 정렬 우선순위가 정해진다.
c = sorted(a, key = lambda x : x[0])
c = [(0, 1), (1, 2), (3, 0), (5, 1), (5, 2)]
d = sorted(a, key = lambda x : x[1])
d = [(3, 0), (5, 1), (0, 1), (1, 2), (5, 2)]
-- 비교할 아이템이 요소가 복수 개일 경우, 튜플로 우선순위를 정해줄 수 있다.
-- -를 붙이면, 현재와 반대차순으로 정렬된다.
e = sorted(a, key = lambda x : (x[0], -x[1]))
=> [(0, 1), (1, 2), (3, 0), (5, 2), (5, 1)] -- 첫 행이 5인 경우, 두 번째 행의 2와 1을 비교 후 반대로 정렬
f = sorted(a, key = lambda x : -x[0])
=> [(5, 1), (5, 2), (3, 0), (1, 2), (0, 1)])
- reverse 옵션 (reverse 파라미터) : 오름차순/내림차순 정렬 선택 옵션이다. 디폴트는 ASC(reverse=False). sorted(~~, reverse=True)로 입력하면 내림차순으로 정렬하여 반환한다.
* 리스트.sort() vs. sorted(리스트)
리스트.sort() : 본체의 리스트를 정렬해 변환
sorted(리스트) : 본체 리스트는 내버려두고, 정렬한 새로운 리스트 반환
반응형