본문 바로가기

프로그래밍언어/Python

[Python] 파이썬 리스트 정렬하기

  • sorted() 함수사용
  • sort() 함수사용

1. sorted() 내장 함수 사용

sorted() 내장 함수는 파이썬에서 순서가 있는 iterable 객체를 인자로 받아 데이터를 정렬해주는 함수입니다.

>>> num_list = [2, 5, 4, 1, 3]
>>> print(sorted(num_list))
[1, 2, 3, 4, 5]

sorted() 는 원본 데이터는 유지한 채로 정렬된 원소들을 새로운 객체에 담아서 반환해 줍니다.

 

리스트 뿐만 아니라 다른 iterable 객체라면 모두 sorted() 함수를 사용가능합니다.

주의할 점은 입력한 자료형이 문자열이든 튜플이든 항상 리스트가 반환된다는 것입니다.

>>> word = 'badytsdf'
>>> print(sorted(word))
['a', 'b', 'd', 'd', 'f', 's', 't', 'y']

 1 - 1 . reverse 옵션

sorted() 내장 함수는 reverse 옵션을 가지고 있는데, default 값으로 오름 차순으로 정렬을 해주게 됩니다.

만약 내림차순으로 정렬을 해주고 싶다면 reverse 옵션 값을 True로 설정해주면 내림차순으로 정렬 해주게 됩니다.

>>> num_list = [2, 5, 4, 1, 3]
>>> print(sorted(num_list,reverse=True))
[5, 4, 3, 2, 1]

reverse 옵션의 값을 True로 하면 내림차순이라면 반대로 False를 해준다면 당연히 기본 값인 오름차순으로 정렬을 해주게 됩니다.

>>> num_list = [2, 5, 4, 1, 3]
>>> print(sorted(num_list,reverse=False))
[1, 2, 3, 4, 5]

 1 - 2 . key 옵션

key 옵션은 정렬의 기준을 정하여 주는 옵션 값입니다.

key 옵션에 함수를 넣어주고 함수의 반환값을 기준으로 리스트를 정렬해주게 됩니다.

>>> book_list = [
>>>     {'code':'3333','name':'Python의 정석'},
>>>     {'code':'2222','name':'Java의 정석'},
>>>     {'code':'1111','name':'C언어의 정석'},
>>>     {'code':'4444','name':'C++의 정석'},
>>> ]
>>> print(sorted(book_list))
TypeError: '<' not supported between instances of 'dict' and 'dict'

dictionary 자료형이 있을 때 이를 정렬 해주게되면 에러가 발생하게 됩니다. 이를 해결 하기 위해서는 key 옵션을 통해서 정렬 기준을 정해주어야합니다.

저는 code 값을 기준으로 정렬하는 코드를 구현해보도록 하겠습니다.

>>> book_list = [
>>>     {'code':'3333','name':'Python의 정석'},
>>>     {'code':'2222','name':'Java의 정석'},
>>>     {'code':'1111','name':'C언어의 정석'},
>>>     {'code':'4444','name':'C++의 정석'},
>>> ]
>>> print(sorted(book_list,key=lambda book: book['code']))
[{'code': '1111', 'name': 'C언어의 정석'}, {'code': '2222', 'name': 'Java의 정석'}, {'code': '3333', 'name': 'Python의 정석'}, {'code': '4444', 'name': 'C++의 정석'}]

lambda 를 이용하여 매개변수로 book을 받고 return 값을 code 값으로 설정 하였습니다.

code 값이 1111, 2222, 3333, 4444 순서로 잘 출력 된  것을 알 수 있습니다.

>>> book_list = [
>>>     {'code':'3333','name':'Python의 정석'},
>>>     {'code':'2222','name':'Java의 정석'},
>>>     {'code':'1111','name':'C언어의 정석'},
>>>     {'code':'4444','name':'C++의 정석'},
>>> ]
>>> print(sorted(book_list,key=lambda book: book['name']))
[{'code': '4444', 'name': 'C++의 정석'}, {'code': '1111', 'name': 'C언어의 정석'}, {'code': '2222', 'name': 'Java의 정석'}, {'code': '3333', 'name': 'Python의 정석'}]

이번에는 name을 기준으로 정렬 한 코드입니다. 알파벳을 기준으로 오름차순으로 잘 정렬 된 것을 볼 수 있습니다.

2. sort() 리스트의 함수

sort()는 파이썬의 함수입니다. 이는 sorted()와 옵션과 정렬 방법은 비슷하지만, sorted()는 원본 리스트는 변경되지 않고, sort()함수를 사용하면 원본함수의 값을 바꾼다는 차이점이 있습니다.

>>> num_list = [5, 1, 3, 4, 2]
>>> num_list.sort()
>>> print(num_list)
[1, 2, 3, 4, 5]

이 처럼 num_list 원본 데이터가 바뀌는 것을 알 수 있습니다. 참고로 num_list.sort()를 print()함수를 통해서 출력 하게되면 None이 반환됩니다.

 

sort() 함수도 sorted() 함수와 마찬가지로 reverse 옵션과 key 옵션이 있습니다. 사용 방법은 같으니 이를 같이 사용한 코드 예제만 보고 설명은 생략하겠습니다.

>>> num_list = [5, -1, 3, -4, 2, -10]
>>> num_list.sort(reverse = True, key = abs)
>>> print(num_list)
[-10, 5, -4, 3, 2, -1]

주의 할 점은 key 값에 있는 함수의 반환 값은 정렬의 기준이 되는 것일 뿐이지 원본 데이터가 바뀌는 것은 아닙니다.