자료구조와 알고리즘/🥑알고리즘

[알고리즘][문자열 조작] - 여러가지 정렬 방법

얄루몬 2022. 2. 17. 16:33

 

📖이 포스팅은 '파이썬 알고리즘 인터뷰 - 박상길님'을 보고 작성되었습니다.


[여러 가지 정렬 방법]

 

[sorted]

  • sorted( )의 경우엔 정렬한 값을 리스트로 돌려준다.
a = [2,5,6,7,1]
print(sorted(a))

b = "asdsadv"
print(sorted(b))
[출력 값]
[1, 2, 5, 6, 7]
['a', 'a', 'd', 'd', 's', 's', 'v']
  • 위의 출력 값과 같이 문자열로 받은 경우에도 list로 결과를 돌려준다. 그렇다면 이를 다시 문자열로 받고 싶을 땐 어떻게 해야 할까??

 

[list를 다시 문자열로 - join( )을 이용하자]

  • "".join(sorted(b)) 
  • join( )을 사용해서 정렬을 받으면 list형태가 아닌 문자열 형태로 정렬된 값을 돌려받을 수 있다.
[출력 값]
aaddssv

 

[sort( ) VS sorted( )]

sorted( ) sort( )
- 정렬 결과를 별도로 리턴해준다. (list 형태로)

- key =옵션을 지정해 정렬을 위한 키 또는 함수를 별도로 지정할 수 있다.
- 리스트 자체를 정렬할 수 있다. (이를 제자리 정렬이라고 한다. 제자리 정렬은 입력을 출력으로 덮어쓰기 때문에 별도의 추가 공간이 필요하지 않고, 리턴값이 없다.) 

- 정렬 결과를 별도로 리턴해주지 않는다.

 

[sorted(key= )]

c = ['av','dadas','adasdasd']

print(sorted(c,key=len))
[출력 값]
['av', 'dadas', 'adasdasd']
  • key = 옵션 지정을 해 정렬을 위한 키 또는 함수를 별도로 지정할 수 있다. (함수도 가능!!)

 

a = ['cde','cfc', 'abc']

def fn(s):
    return s[0], s[-1]

print(sorted(a,key=fn))
[출력값]
['abc', 'cfc', 'cde']
  • 함수를 별도로 지정한 방법
  • 이 경우 index[0]번째를 기준으로 정렬한 뒤 s[-1] 맨 끝에 있는 문자를 기준으로 정렬해서 ['abc', 'cde', 'cfc' ] 가 아닌 위와 같은 출력값을 내놓은 것이다.

 

[함수 별도 지정이 아닌 람다 표현식을 이용한 방법]

a = ['cde','cfc', 'abc']

print(sorted(a,key=lambda x: (x[0], x[-1])))