본문 바로가기
Python

[Python] 프로그래머스 _ sort( ), sorted( ) 차이 +lambda 함수

by 율✌️ 2023. 2. 24.
파이썬을 배우기 시작하면서 일주일에 적어도 한문제 정도는 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이다(정렬된 값이 리턴되지 않음).
sort()의 결과


sorted()
사용법: sorted(list)
: 원본 배열 arr의 값은 변하지 않고 sorted()의 값이 새 리스트 new_arr에 저장된다.
sorted()의 결과

 

 


 

 

 

하지만 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