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

Python – 특정 범위를 포함하는 조건으로 리스트 정렬하기

파이썬에서 리스트를 특정 범위를 기준으로 정렬해야 하는 경우, 함수 내부에서 abs 메서드, sum 메서드, 그리고 리스트 컴프리헨션을 함께 활용하면 간결하게 해결할 수 있습니다.

아래는 실제 동작 과정을 보여주는 예제입니다.

예제 코드

def sum_range_incl(my_row):
    return sum([abs(element[1] - element[0]) for element in my_row if element[0] > i and element[0] < j and element[1] > i and element[1] < j])

my_list = [[(12, 4), (55, 10), (11, 16)], [(42, 14)], [(2, 5), (2, 28), (9, 16)], [(12, 6), (6, 13)]]

print("The list is :")
print(my_list)

i, j = 2, 15

my_list.sort(key=sum_range_incl)

print("The resultant list is :")
print(my_list)

출력 결과

The list is :
[[(12, 4), (55, 10), (11, 16)], [(42, 14)], [(2, 5), (2, 28), (9, 16)], [(12, 6), (6, 13)]]
The resultant list is :
[[(42, 14)], [(2, 5), (2, 28), (9, 16)], [(12, 4), (55, 10), (11, 16)], [(12, 6), (6, 13)]]

코드 설명

  • 'sum_range_incl'이라는 이름의 함수가 정의되며, 튜플들의 리스트를 매개변수로 받습니다.

  • 리스트 컴프리헨션을 통해 리스트의 각 요소를 순회합니다.

  • 각 요소에 대해 첫 번째 원소(element[1])와 0번째 원소(element[0]) 사이의 절대 차이를 계산하며, 동시에 0번째 원소가 지정된 범위(정수 i와 j 사이)에 속하는지 조건으로 검사합니다.

  • 조건을 만족하는 값들의 합계가 함수의 반환값이 됩니다.

  • 튜플의 리스트로 구성된 중첩 리스트를 정의하고 콘솔에 출력합니다.

  • 범위를 나타내는 두 정수 ij의 값이 설정됩니다.

  • sort 메서드를 호출하면서 앞서 정의한 함수를 key 매개변수로 전달하여 리스트를 정렬합니다.

  • 정렬된 최종 결과가 콘솔에 출력됩니다.

핵심 포인트

이 방식의 핵심은 sort 메서드의 key 인자에 커스텀 함수를 넘기는 것입니다. 각 하위 리스트는 범위 조건을 만족하는 튜플들의 절대 차이 합계를 기준으로 오름차순 정렬되며, 조건을 만족하지 않는 요소는 계산에서 자연스럽게 제외됩니다. 이처럼 key 함수를 직접 작성하면 단순 값 비교가 아닌 복잡한 조건 기반의 정렬도 손쉽게 구현할 수 있습니다.