https://docs.python.org/3/library/stdtypes.html?highlight=sort#list.sort
<list_name>.sort(key = None, reverse = False)
key에는 어떤 key를 기준으로 정렬할 지, 함수를 넣는다.
reverse는 False(기본값)일 때는 오름차순, True일 때는 내림차순으로 정렬된다.
>>> l2 = [[2, 'c'], [3, 'b'], [1, 'a']]
>>> l2.sort(key = lambda x : x[0])
>>> print(l2)
[[1, 'a'], [2, 'c'], [3, 'b']]
>>> l2.sort(key = lambda x : x[1])
>>> print(l2)
[[1, 'a'], [3, 'b'], [2, 'c']]
>>> l2.sort() #기본은 x[0] 기준으로 정렬한다.
>>> print(l2)
[[1, 'a'], [2, 'c'], [3, 'b']]
내림차순으로 정렬할 때 다음과 같은 방법을 사용할 수도 있다.
>>> l1 = [4, 5, 3]
>>> l1.sort(key = lambda x : -x)
>>> print(l1)
[5, 4, 3]
sort는 따로 반환을 하지 않고, 원본 list 자체를 정렬한다.
(위 예제에서도 정렬된 l을 확인하려면 print(l)을 따로 해야된다.)
https://docs.python.org/3/library/functions.html#sorted
sorted(<list_name>, key = None, reverse = False)
원본 리스트는 수정하지 않고, 정렬된 새로운 리스트를 반환한다.
>>> a = [5, 9, 3]
>>> sorted(a)
[3, 5, 9]
>>> print(a)
[5, 9, 3]
>>> b = sorted(a, reverse = True)
>>> print(b)
[9, 5, 3]
>>> print(a)
[5, 9, 3]
sorted를 해도 원본 리스트 a는 바뀌지 않는다.
가장 큰 차이점은 sorted는 정렬한 새로운 list를 반환하고 원본 list는 바꾸지 않는다.
sort는 전달된 원본 list를 정렬하고 반환값이 없다.
참고 자료: https://infinitt.tistory.com/122
key에 넣을 함수에 반환 값을 tuple 또는 list 형으로 하면 된다.
그러면 튜플/리스트의 첫 번째 인덱스 값에 대해서 정렬하고, 둘이 같을 경우 두 번째 인덱스 값에 대해서 정렬한다.
>>> name = [['Anne', 18], ['Sam', 20], ['Matt', 19], ['Sam', 18], ['Anne', 17]]
>>> sorted(name, key = lambda x : [x[0], -x[1]]
[['Anne', 18], ['Anne', 17], ['Matt', 19], ['Sam', 20], ['Sam', 18]]
key = lambda x : [x[0], -x[1]]의 의미:
우선 x[0] (이름순)으로 정렬. 이름이 같을 경우 -x[1] (나이의 내림차순)으로 정렬.