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

파이썬 람다 표현식으로 양수와 음수 재정렬하는 방법

이 글에서는 양수와 음수가 섞여 있는 정수 배열을 입력받아, 음수 배열과 양수 배열로 나눈 후 하나로 합치는 람다 표현식(lambda expression) 활용법을 알아봅니다.

먼저 정수 배열을 인자로 하나만 받는 Rearrange() 함수를 정의합니다. 이 함수는 리스트 컴프리헨션을 이용해 음수 목록과 양수 목록을 각각 만들고, 두 배열을 병합하여 반환합니다. 그 결과 음수들은 배열의 앞쪽에, 양수들은 뒤쪽에 배치됩니다.

예제 코드

def Rearrange(arr):
    # 첫 번째 표현식은 arr에서 음수만 추출한 리스트를 반환합니다.
    # 두 번째 표현식은 arr에서 0을 포함한 양수만 추출한 리스트를 반환합니다.
    arr_neg = [x for x in arr if x < 0]
    arr_pos = [x for x in arr if x >= 0]
    return arr_neg + arr_pos

# 드라이버 함수
if __name__ == "__main__":
    arr = [19, -56, 3, -1, -45, -23, 45, 89, 90]
    print(Rearrange(arr))

실행 결과

[-56, -1, -45, -23, 19, 3, 45, 89, 90]

동작 원리 살펴보기

위 코드에서 핵심은 조건 필터링입니다. x < 0 조건을 만족하는 요소들만 모아 arr_neg를 구성하고, x >= 0 조건(0 포함)을 만족하는 요소들로 arr_pos를 구성합니다. 이후 리스트 연결 연산자(+)를 사용해 두 리스트를 순서대로 이어 붙이면, 음수가 먼저 오고 양수가 뒤따르는 새로운 배열이 완성됩니다.

참고로 원본 배열 내부의 상대적인 순서는 유지되며, 이 방식은 안정 정렬(stable)과 유사한 결과를 제공합니다. 또한 리스트 컴프리헨션 대신 filter() 함수와 람다를 조합해 다음과 같이 작성할 수도 있습니다.

def Rearrange(arr):
    arr_neg = list(filter(lambda x: x < 0, arr))
    arr_pos = list(filter(lambda x: x >= 0, arr))
    return arr_neg + arr_pos

결론

이번 글에서는 람다 표현식과 리스트 컴프리헨션(또는 filter())을 활용해 입력 배열의 양수와 음수를 재정렬하는 방법을 배웠습니다. 이 기법은 시간 복잡도 O(n)으로 배열을 한 번만 순회하므로 효율적이며, 데이터 전처리나 정렬 문제의 기초 단계로 널리 활용됩니다.