1. 기본적인 리스트 정렬
* sort 정렬
- sort는 리스트에서 제공되는 기본적인 메서드이다. 주로 아래와 같이 사용한다.
lst = [2, 3, 5, 6, 1, 4]
lst.sort()
print(lst)
# [1, 2, 3, 4, 5, 6]
- sort 는 기본적으로 오름차순 정렬이다. 인자로 key, reverse를 넣어서 변형이 가능하다.
lst = [2, 3, 5, 6, 1, 4]
lst.sort(reverse=True)
print(lst)
# [6, 5, 4, 3, 2, 1]
- 위는 reverse를 True로 하여 내림차순 정렬을 시행한 것이다.
* key 사용하기
- 이번에는 key를 사용해보자. key는 함수의 결과에 따라 정렬을 할 수 있다.
lst = ["one", "two", "three", "four"]
lst.sort()
lst.sort(key=len)
print(lst)
# ['one', 'two', 'four', 'three']
- len함수 결과에 따라 문자열이 가장 긴 'three'가 가장 뒤로 갔음을 볼 수 있다.
2. 2차원 배열 정렬
* 첫 번째 값 이용하기
- 이제 2차원 배열을 정렬해보자. 먼저 각 리스트의 첫번째 인덱스에 대해서 정렬해 보자.
lst = [[2, 1], [3, 4], [1, 2], [1, 3], [3, 2]]
lst.sort(key=lambda x:x[0])
print(lst)
# [[1, 2], [1, 3], [2, 1], [3, 4], [3, 2]]
- lambda를 이용했고, x:x[0] 으로 0번째 인덱스에 대해서 정렬시켰다.
- 0번째 인덱스에 대해서 오름차순 정렬은 되었지만 동일한 0번째 인덱스를 가진 1번째 인덱스에 대해서는 정렬이 되지 않았음을 알 수 있다.
* 두 번째 값 이용하기
- 그렇다면 다른 인덱스에 대해서도 정렬하려면 어떻게 해야할까.
lst = [[2, 1], [3, 4], [1, 2], [1, 3], [3, 2]]
lst.sort(key=lambda x: (x[0], -x[1]))
print(lst)
# [[1, 3], [1, 2], [2, 1], [3, 4], [3, 2]]
- x: ( ) 의 괄호안에 튜플 형식으로 집어넣는다. 이 때 -를 하게되면 역으로 정렬시킬 수 있다. 여기서는 먼저 0번째 인덱스에 대해서 오름차순으로 정렬한 뒤, 동일한 값의 경우 내림차순으로 재정렬된다.
lst = [[2, 1], [3, 4], [1, 2], [1, 3], [3, 2]]
lst.sort(key=lambda x: (x[1], x[0]))
print(lst)
# [[2, 1], [1, 2], [3, 2], [1, 3], [3, 4]]
- 순서를 바꾸는 것도 가능하다.
- 참고로 2차원 배열에서 sort의 기본값은 아래와 같다.
lst = [[2, 1], [3, 4], [1, 2], [1, 3], [3, 2]]
lst.sort()
print(lst)
# [[1, 2], [1, 3], [2, 1], [3, 2], [3, 4]]
- 위에서 했던 작업이 무색하게 0번째 인덱스를 오름차순 정렬하고, 같은 값의 경우 오름차순으로 재정렬까지 시켜준다. 그러나 특정 인덱스에 대해서만 정렬을 하려면 key를 이용할 수 박에 없다.
3. 딕셔너리 정렬
- 딕셔너리는 sort메서드가 없기 때문에 sorted함수를 사용해야한다. sorted(이터러블, key, reverse) 와 같이 사용한다.
dic = {
2: 1,
3: 4,
5: 2,
1: 3,
4: 1
}
x = sorted(dic.items(), key=lambda x:x[0])
print(x)
# [(1, 3), (2, 1), (3, 4), (4, 1), (5, 2)]
- 딕셔너리를 이터러블로 변경하기 위해서 items메서드를 먼저 사용했다. 그리고 위에서 했었던 방식과 동일하게 정렬했다.
참고
'Language > Python' 카테고리의 다른 글
<파이썬> 문자열과 메서드 (0) | 2021.04.25 |
---|---|
<파이썬> 리스트 컴프리헨션 (1) | 2021.03.03 |
<파이썬 기초> 12. 정규식 (0) | 2020.11.03 |
<파이썬 기초> 11. 튜플 (0) | 2020.10.27 |
<파이썬 기초> 10. 딕셔너리 (0) | 2020.10.20 |