본문 바로가기

Programming/Python

[Python] sort() 함수 알아보기

반응형

sort() 함수는 Python의 내장 함수를 사용하여 정렬하는 방법이다.

 

사용 시 주의 사항

1. sort() 함수는 sorted() 함수와 다르게 Return Value가 존재하지 않음

2. Key 함수를 사용하면 List 내부의 Element에서 특정 조건에 따라 정렬할 수 있음

 

Sort 함수란?

: 리스트 내부에 있는 요소들을 정렬해주는 함수 (Default : 오름차순)

 

사용법

sort(*, key: Optional[Callable[[_T], Any]]=..., reverse: bool=...) -> None

list.sort()

list.sort(reverse=True)

list.sort(key = lambda x : x['age'], reverse=True)

...

 

예시

리스트에 sort 함수를 쓸 경우 Return Value는 None이 반환되므로 None이 출력되었다.

# Sort
lst = [5, 2, 3, 1, 8]

print(lst.sort())
print(lst)

lst2 = [1, 5, 3, 20, 11]
lst.sort(reverse=True)
print(lst)


❯ python python/practice/sort.py
None
[1, 2, 3, 5, 8]
[8, 5, 3, 2, 1]

 

- 중요 포인트

숫자가 아닌 문자열이 오더라도 정렬이 가능하다.

⇒ Unicode를 기준으로 정렬하게 된다.

korean_list = ["안녕", "하세요", "반값습니다."]
korean_list.sort()

print(korean_list)

english_list = ["i", "love", "you"]
english_list.sort()
print(english_list)

mixed_list = ["hello", "world", "안녕", "하세요"]
mixed_list.sort(reverse=True)
print(mixed_list)

print(f"H  : {ord('H')}")
print(f"반 : {ord('반')}")

❯ python python/practice/sort.py
['반값습니다.', '안녕', '하세요']
['i', 'love', 'you']
['하세요', '안녕', 'world', 'hello']
H  : 72
반 : 48152

 

 

Sort 함수의 옵션 중 Key 함수를 이용한 정렬

: 특정한 조건에 따라 List를 정렬하고 싶다면 Key 함수를 활용하여 정렬할 수 있음

 

다음의 고민을 할 수 있다.

  1. 리스트 내 Element의 길이를 기준으로 정렬하고 싶다면 어떻게 할까?
  2. 리스트 안에 리스트 or 튜플 or 문자열과 같은 Iterable한 Element들이 존재하고 그 요소들의 특정 인덱스에 위치한 것을 기준으로 정렬하고 싶다면 어떻게 할까?
  3. 딕셔너리의 Value를 이용하여 정렬할 수는 있을까?

 

예시1)

sort 함수를 사용하였으며, Key = lambda를 활용하였음

key는 정렬 시 비교할 값을 Return하는 함수이며, x는 리스트 내 Element를 의미한다.

 

  1. lst는 Iterable이다. 각각의 Element를 돌면서 len(x), 각 Element의 길이를 기준으로 Sort함
  2. lst2 또한 Iterable, 각각의 Element의 1번째 인덱스의 값을 기준으로 Sort함
  3. lst3는 Dictionary 내 age란 Key에 담겨 있는 Value를 기준으로 정렬하였고, 내림차순
lst = ["i", "love", "you", "hello", "world!"]

lst.sort(key = lambda x : len(x))
print(lst)

lst2 = [(1, 2), (3, 4), (10, 20), (30, 50)]
lst2.sort(key = lambda x : x[1], reverse=True)
print(lst2)

lst3 = [
    {
        'name': '홍길동',
        'age': 20
    },
    {
        'name': '유재석',
        'age': 50
    },
    {
        'name': '이광수',
        'age': 40
    },
    {
        'name': '강호동',
        'age': 52
    }
]

lst3.sort(key = lambda x : x['age'], reverse=True)
print(lst3)


❯ python python/practice/sort.py
['i', 'you', 'love', 'hello', 'world!']
[(30, 50), (10, 20), (3, 4), (1, 2)]
[{'name': '강호동', 'age': 52}, {'name': '유재석', 'age': 50}, 
{'name': '이광수', 'age': 40}, {'name': '홍길동', 'age': 20}]

 

 

** 참고로 sorted() 함수와 사용법은 유사하나 sorted() 함수는 정렬된 리스트를 반환해준다.

⇒ 기존의 리스트를 변경하지 않고 정렬된 리스트를 새롭게 얻을 수 있음

⇒ 정렬을 하는 동시에 Deep Copy도 이루어지기 때문에 원본 데이터에 영향을 주지 않음

lst = [1, 6, 2, 10, 5]

print(sorted(lst))

lst2 = [[1, 2], [5, 3], [10, 20], [30, 650]]

new_lst2 = sorted(lst2, key = lambda x : x[1])
print(new_lst2)

 

 

 

 

 

 

Ref : https://mong9data.tistory.com/33

반응형