파이썬을 배우기 시작하면서 일주일에 적어도 한문제 정도는 JS말고 파이썬으로 풀어보기로 결심!
이번문제를 풀면서 sorted() 함수랑 좀 가까워진듯..?
문자열 내맘대로 나누기 (Lv.1) 링크
문제 요약:
문자열로 구성된 리스트 strings과, 정수 n이 주어진다.
각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하기.
>> [입출력예]
: strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬
보자마자 sort 함수를 사용하고 싶다는 욕구가 올라오긴하는데 파이썬에도 sort 함수가있나..?
하고 찾아보니 sort(), sorted()도 있다.
아니뭐하러 두개나 ㅠ
그래도 정리해보자면!!
sort() & sorted() 차이점
sort()
사용법: list.sort()
: 원본배열의 값이 정렬되어 수정되며, 함수의 리턴 값이 None이다(정렬된 값이 리턴되지 않음).
sorted()
사용법: sorted(list)
: 원본 배열 arr의 값은 변하지 않고 sorted()의 값이 새 리스트 new_arr에 저장된다.
하지만 sort/sorted함수만 달랑쓰면 맨 앞글자를 기준으로 정렬되기 때문에 정수 n을 기준으로 한다는 조건이 붙어있었다..
조건 어디다 넣어야하죠 ㅋㅋㅋ 🥲
그래서 찾게된 lambda 함수
lambda 함수?
런타임에서 잠깐 생기고 사라지는 함수라서 이름은 따로 부여할 필요 없다.
코드의 간결함과 메모리의 절약이 장점!!
>>>기존 함수선언>>>
def 함수이름 (매개변수)
return 결과
>>>lambda 함수>>>
lambda (매개변수) :결과
아 풀었다!! 하고 코드를 짰다.
lambda 함수를 sorted에서 key=lambda 형식으로 사용.
def solution(strings, n):
return sorted(strings, key=lambda x:x[n])
결과는??? 통과못함ㅎ🤯
strings= ["abce", "abcd", "cdx"] n=2 이 예시에서 걸렸다 ㅠ
2번째에 똑같은 글자가 있는경우를 생각을 못했다.
그럼 그다음 글자를 비교해야하는데 어떻게 하짘ㅋㅋㅋㅋㅋㅋ for 문을 돌려야하나..?
드디어 정답 ✔️
하루종일 씨름하다가 결국 친구에게 SOS.
lambda결과값에 (결과값1,결과값2,결과값3) 이렇게하면 sort할때의 우선순위를 정할 수 있다고함
이번문제의경우의 우선순위를 정하자면
1. n번째 글자를 기준으로 정렬
2.string 자체를 정렬
코드로보면
def solution(strings, n):
return sorted(strings, key=lambda x:(x[n],x)) #n번째 글자로 정렬후 string 자체로 2차정렬
# 위의 코드를 아래처럼 쓸 수 도 있다.
# 글자자체로 일단 먼저 정렬해두고, n번째 글자 기준으로 2차 정렬
def solution(strings, n):
new_arr=sorted(strings)
return sorted(new_arr, key=lambda x:x[n])
이거 푸는데 몇시간 걸렸더라....^^
매번 JS로 풀던 문제를 파이썬으로 풀려 니 키보드에서 손이 안움직이더라..
문제를 보고 뭔가 막역하게자바스크립트랑 애매하게 사용법이 달라서 너무 헷갈린다 🥲
그래도 비슷한부분이 많으니 빨리 적응 할 수 있을것 같기도하다!!
새벽까지 안자고 같이 문제 풀어준 친구에게 감사 🥳
'Python' 카테고리의 다른 글
BeautifulSoup 크롤링 기본코드 (0) | 2022.05.19 |
---|