[Python] Sorting(정렬)

 

sorted() 함수

  • Sorted() 함수는 정렬을 지원하는 파이썬의 내장함수이다.
  • 정렬 후의 값을 리스트로 반환한다. 즉, 원본을 수정하지 않는다.
  • 또한 모든 iterable객체(list, dictionary, 문자열, set 등)에 적용할 수 있다.
  • reverse 인자를 통해 내림차 순으로 정렬할 수 있고, key 인자에 함수를 넣어 정렬 기준을 Custom할 수도 있다
a = [2, 1, 5, 6, 4]
sort_a = sorted(a)
print(sort_a) # [1, 2, 4, 5, 6]
print(a) # [2, 1, 5, 6, 4] -> 원본 유지

sort() 메서드

  • sort()는 함수가 아니라 리스트의 메서드이다.
  • 리스트의 메서드이기에 당연히 리스트에만 적용할 수 있다.
  • 정렬 후의 값을 반환하는 것이 아닌 원본을 직접 정렬 상태로 수정한다.
  • reverse 인자를 통해 내림차 순으로 정렬할 수 있고, key 인자에 함수를 넣어 정렬 기준을 Custom할 수도 있다
a = [2, 1, 5, 6, 4]
a.sort()
print(a) # [1, 2, 4, 5, 6]

key 인자 활용

  • 예를 들어, 우리가 튜플로 이뤄진 리스트를 정렬한다고 하자. 이때, 튜플의 특정 몇 번째 인자를 기준으로 정렬을 할 수 있다.
tup_list = [(1, 15), (2, 5), (20, 2), (4, 6), (12, 9)]
tup_list.sort()
print(tup_list) # [(1, 15), (2, 5), (4, 6), (12, 9), (20, 2)]
  • 위의 코드처럼 하면, 첫번째 인자를 기준으로 오름차 정렬이 이뤄진다.
  • 두 번쨰 원소를 기준으로 하고 싶다면, sort()key인자에 함수를 넣어주면 된다.
  • 주로 keylambda 함수를 지정하여 사용한다.
tup_list = [(1, 15), (2, 5), (20, 2), (4, 6), (12, 9)]
tup_list.sort(key = lambda x: x[1])
print(tup_list) # [(20, 2), (2, 5), (4, 6), (12, 9), (1, 15)]
  • 이는 sort() 메서드 뿐만 아니라 sorted() 함수도 가능하다.
  • 예를 들어, dictionary의 value로 정렬한다고 하자. 기본적으로 dictionary에 sorted를 적용하면, dictionary의 key를 기준으로 정렬된다.
dic = {"banana": 2,
       "apple": 3,
       "grape": 7,
       "peach": 4}

print(sorted(dic.items())) # [('apple', 3), ('banana', 2), ('grape', 7), ('peach', 4)]
# 주의할 점은 단순히 sorted(dic)만 하면 key값만 정렬되어 반환된다.
# 그래서 items()메서드로 (key, value)쌍으로 반환하여 정렬한다.
  • 하지만 우리가 key가 기준이 아닌 value를 기준으로 하고 싶다면 key에 함수를 넣어주면 된다.
dic = {"banana": 2,
       "apple": 3,
       "grape": 7,
       "peach": 4}

sorted_by_value = (sorted(dic.items(), 
                          key = lambda x: x[1]))
print(sorted_by_value) # [('banana', 2), ('apple', 3), ('peach', 4), ('grape', 7)]