[Python] sort(), sorted()

애이용·2021년 1월 14일
0

python

목록 보기
1/7
post-thumbnail
post-custom-banner

알고리즘 문제 풀 때 헷갈리는 문법 정리(1)


sort() vs sorted()

sort()

  • arr.sort([reverse=<True|False>][, key=<function>])
  • arr.sort() : arr 직접 수정
  • 내림차순 정렬 : arr.sort(reverse = True)

sorted()

  • sorted(arr[, key=<function>][, reverse=<True|False>])
  • sorted(arr) : arr을 변경하는 것이 아니라, 정렬된 새로운 리스트를 반환
  • 모든 iterable에 동작(list, tuple, dict, 문자열(알파벳, 가나다 순) 등등)
  • 내림차순 정렬 : sorted(arr, reverse = True)

key parameter를 이용해보자 ✨

key를 이용하면, 원하는 기준으로 순서대로 정렬 가능하다

1. 문자열의 길이를 기준으로 정렬을 해보자

str_list = ['test', 'te', 'tes', 't']
print(sorted(str_list, key=len))
print(sorted(str_list, reverse=True, key=len))

# 출력결과
['t', 'te', 'tes', 'test']
['test', 'tes', 'te', 't']

option 파라미터는 순서에 상관없이 대입 가능하다

2. 함수를 정의해서 key에 대입을 해보자
각 배열의 원소가 tuple일 때 코드이다

def sort_2(t):
  return t[1] # 두번째 인덱스값 리턴
array.sort(key = sort_2) # 두번째 인덱스를 기준으로 정렬

함수를 정의한다면 더 직관적이게 이해할 수 있어서 좋은 듯하다!\

3. lambda식의 조화
key와 lambda식의 조화는 체고인 듯

arr = [(5, 4), (2, 1), (3, 3), (1,3), (1, 2)]
sorted(arr, key = lambda x : x[0])
# [(1, 3), (1, 2), (2, 1), (3, 3), (5, 4)]
sorted(arr, key = lambda x : (-x[1], x[0]))
# [(5, 4), (1, 3), (3, 3), (1, 2), (2, 1)]

두번째 예시를 보면, 람다식에 두개의 인자가 존재한다.
먼저 첫번째 인자를 기준으로 내림차순(-),
그 안에서 다음 두번째 인자를 기준으로 오름차순으로 정렬하게 된다

위의 예시 코드에서 일부러 (3, 3), (1, 3)을 대입했다.
먼저 두번째 인덱스를 이용해 내림차순을 진행한다.
만약 key = lambda x : -x[1]이었다면, 출력 결과는 (3, 3), (1, 3) 이다.

key = lambda x : (-x[1], x[0])이기 때문에,
같은 수에 대해 첫번째 인덱스를 기준으로 또 오름차순 정렬을 하게 된다
그렇기 때문에 출력 결과는 (1, 3), (3, 3)이다.

여기서 내림차순 정렬을 '-'로 간단히 표현할 수 있다는 것이 매우 편한듯하다
다음 포스팅은 배열, 리스트 문법 정리를 해야겠다 🖐🖐

profile
로그를 남기자 〰️
post-custom-banner

0개의 댓글