💡 로그를 재정렬하라. 기준은 다음과 같다.
💡 풀이 : 람다와 + 연산자를 이용
🗣️ isdigit()은 해당 문자열이 숫자 인지 여부를 판별해 준다.
🗣️ + 연산자는 배열을 합쳐준다.
a = [1,2,3] b = [4,5,6] print(a + b) // [1,2,3,4,5,6] print(b + a) // [4,5,6,1,2,3]
import sys logs = deque(sys.stdin.readline().strip().split(',')) def sort_func(logs: list[str]) -> list[str]: digits = [] letters = [] for i in logs : if i.split()[1].isdigit() : digits.append(i) else : letters.append(i) letters.sort(key = lambda x : (x.split()[1:], x.split()[0])) return letters + digits print(sort_func(logs))
🗣️ letters.sort(key = lambda x : (x.split()[1:], x.split()[0])) 는 식별자를 제외한 문자열 [1:]을 키로하여 정렬하되, 동일한 경우 후순위로 식별자 [0]을 지정해 정렬하도록 람다 표현식을 이용해 정렬.
람다 표현식이란, 식별자 없이 실행 가능한 함수를 말하며, 함수 선언 없이도 하나의 식으로 함수를 단순하게 표현할 수 있다.
만약, 각 요소의 번호 순 정렬이 아닌 그 뒤의 문자 순 정렬을 원하며, 문자가 동일한 경우에만 그 앞 번호순으로 정렬되는 형태를 희망햘 경우?
s = ['2 A','1 B','4 C','1 A'] sorted(s) // ['1 A','1 B','2 A','4 C'] // sorted는 숫자 그리고 문자순으로 정렬함 def sorted_func(x) : return x.split()[1], x.split()[0] // ['1 A','2 A','1 B','4 C']
여기서 람다 표현식을 사용하면 sorted_func처럼 별도의 함수를 선언하지 않고 쉽게 처리할 수 있다.
s.sort(key=lambda x : (x.split()[1], x.split()[0])) // ['1 A','2 A','1 B','4 C']