Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 하위 리스트의 두 번째 요소를 기준으로 리스트 정렬하기


리스트가 주어졌을 때, 각 하위 리스트의 두 번째 요소를 기준으로 전체 리스트를 정렬해야 하는 경우가 자주 있습니다. 이번 글에서는 가장 기본적인 정렬 알고리즘 중 하나인 버블 정렬(Bubble Sort)을 사용하여 이 문제를 해결하는 방법을 단계별로 살펴보겠습니다.

예시

입력 : [['CCC', 15], ['AAA', 10], ['RRRR', 2], ['XXXX', 150]]
출력 : [['RRRR', 2], ['AAA', 10], ['CCC', 15], ['XXXX', 150]]

숫자 값(두 번째 요소)이 2 → 10 → 15 → 150 순으로 오름차순 정렬된 것을 확인할 수 있습니다.

알고리즘

1단계: 정렬할 리스트가 주어진다.
2단계: 중첩 반복문을 사용하여 하위 리스트의 두 번째 요소에 접근한다.
3단계: 배열의 모든 요소를 순회한다.
4단계: 마지막 i개의 요소는 이미 제자리에 정렬되어 있다.
5단계: 배열을 0부터 n-i-1까지 순회한다.
6단계: 현재 요소가 다음 요소보다 크면 두 요소를 서로 교환한다.

예제 코드

# 하위 리스트의 두 번째 요소를 기준으로 리스트를 정렬하는 Python 프로그램
# 임시 변수를 사용한 제자리(in-place) 정렬 방식
def sortlist(A):
    l = len(A)
    for i in range(0, l):
        for j in range(0, l - i - 1):
            if (A[j][1] > A[j + 1][1]):
                tempo = A[j]
                A[j] = A[j + 1]
                A[j + 1] = tempo
    return A

# 드라이버 코드
A = [['AAA', 10], ['CCC', 15], ['RRRR', 2], ['XXXX', 150]]
print(sortlist(A))

실행 결과

[['RRRR', 2], ['AAA', 10], ['CCC', 15], ['XXXX', 150]]

참고: sorted() 함수로 더 간단하게 정렬하기

실무에서는 버블 정렬 대신 파이썬 내장 함수인 sorted()key 인자와 함께 사용하면 한 줄로 동일한 결과를 얻을 수 있습니다. 버블 정렬의 시간 복잡도가 O(n²)인 반면, 파이썬의 내장 정렬은 O(n log n)으로 훨씬 효율적입니다.

A = [['AAA', 10], ['CCC', 15], ['RRRR', 2], ['XXXX', 150]]
result = sorted(A, key=lambda x: x[1])
print(result)

이처럼 하위 리스트의 특정 위치에 있는 값을 기준으로 정렬할 때는 lambda를 활용한 key 지정이 가장 간결하고 파이썬다운 방식입니다. 학습 목적으로는 버블 정렬 구현을, 실제 프로젝트에서는 내장 함수를 활용하는 것을 권장합니다.