본문 바로가기

Language/Python

<파이썬> 2차원 배열 정렬

 

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메서드를 먼저 사용했다. 그리고 위에서 했었던 방식과 동일하게 정렬했다.

 

 


 

참고

 

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

 

[Python] 리스트, 딕셔너리 sort(), sorted() 사용하기

보통 리스트 타입을 정렬할 때, .sort()로 간단하게 사용할 수 있습니다. 하지만 이 때, 2차원 배열 같은 특정 경우에서 비교하거나 딕셔너리의 값을 기준으로 정렬을 하고 싶다면 sort() 또는 sorted()

brownbears.tistory.com

 

 

'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