HOWTO · Python

Python에서 리스트에 함수를 적용하는 방법

Python에서 리스트에 함수를 적용하는 주요 방법은 for 루프, map() 함수, 리스트 컴프리헨션, 제너레이터 표현식의 4가지입니다.

이 페이지의 내용

Python 리스트의 모든 항목에 함수를 적용하려면 항목마다 함수를 호출하고 반환된 값을 수집하세요. 예를 들어 각 숫자에 10을 곱하면 [1, 2, 3, 4]가 [10, 20, 30, 40]으로 변환됩니다. for 루프, map(), 리스트 컴프리헨션 또는 제너레이터 표현식을 사용할 수 있습니다. 아래 예제는 동일한 함수와 입력을 사용하므로 각 접근 방식이 결과를 어떻게 생성하거나 제공하는지 비교할 수 있습니다.

for 루프를 사용해 Python 리스트에 함수 적용하기

for 루프는 각 단계를 명시적으로 만듭니다. 결과 리스트를 만들고, 입력마다 함수를 호출하고, 반환된 값을 추가합니다. 루프에 추가 문이나 분기가 필요할 때 유용합니다. 다음 예제는 각 숫자에 함수를 적용하고 결과 리스트를 출력합니다.

def multiply_by_ten(number):
    return 10 * number


numbers = [1, 2, 3, 4]
results = []

for number in numbers:
    results.append(multiply_by_ten(number))

print(results)

이 루프는 numbers를 변경하지 않고 results를 별도의 리스트로 구축합니다. 자신의 데이터에 필요한 변환을 수행하도록 함수 본문을 변경하세요.

map() 함수를 사용해 Python 리스트에 함수 적용하기

Python의 map() 함수는 호출 가능 객체와 이터러블을 받아 항목마다 호출 가능 객체의 결과를 생성합니다. Python 3에서 map()은 이터레이터를 반환합니다. 나머지 코드에 리스트가 필요하다면 list()로 감싸세요.

def multiply_by_ten(number):
    return 10 * number


numbers = [1, 2, 3, 4]
results = list(map(multiply_by_ten, numbers))
print(results)

이 형식은 적용할 함수가 이미 있을 때 간결합니다. 이터레이터는 list()가 값을 요청함에 따라 소비됩니다. 값을 다시 순회해야 한다면 결과 리스트를 유지하거나 다른 이터레이터를 만드세요.

리스트 컴프리헨션을 사용해 Python 리스트에 함수 적용하기

리스트 컴프리헨션은 for 절 앞에 각 항목에 대한 표현식을 배치하여 새 리스트를 구축합니다. 이는 메서드가 아니라 Python 언어 구성이며, 변환이 한 줄에 명확히 들어갈 때 간결한 선택입니다.

def multiply_by_ten(number):
    return 10 * number


numbers = [1, 2, 3, 4]
results = [multiply_by_ten(number) for number in numbers]
print(results)

표현식 multiply_by_ten(number)가 각 결과를 결정하고, for 절이 각 입력 항목을 제공합니다. 컴프리헨션에는 선택한 항목만 포함하도록 조건을 넣을 수도 있습니다.

제너레이터 표현식을 사용해 Python 리스트에 함수 적용하기

제너레이터 표현식은 컴프리헨션 스타일의 표현식을 괄호로 감싼 것입니다. 결과 리스트를 즉시 구축하는 대신, 값이 요청될 때 지연 생성합니다. 이렇게 하면 변환된 모든 값을 한 번에 보유하지 않을 수 있지만, 제너레이터를 리스트로 변환하면 값이 구체화됩니다.

def multiply_by_ten(number):
    return 10 * number


numbers = [1, 2, 3, 4]
results = (multiply_by_ten(number) for number in numbers)
print(list(results))

각 값은 이터레이션 중에 생성됩니다. 제너레이터는 순회하면서 소비되므로, 같은 제너레이터에 대한 두 번째 순회는 값을 반복하지 않습니다. 값을 재사용해야 한다면 새 제너레이터를 만들거나 리스트에 저장하세요.

결론

각 단계를 명시적으로 제어하고 싶을 때는 for 루프를 선택하고, 기존 함수를 이터러블에 적용하는 것이 자연스러울 때는 map()을 사용하세요. 리스트 컴프리헨션은 간결한 구문으로 새 리스트를 직접 만듭니다. 지연 이터레이션을 원하고 모든 결과를 한 번에 구체화할 필요가 없을 때는 제너레이터 표현식을 사용하세요. 네 가지 접근 방식 모두 직접 정의한 함수뿐 아니라 내장 함수도 호출할 수 있습니다. 예를 들어 컴프리헨션은 [str(item) for item in numbers]와 같이 각 항목에 str을 적용할 수 있습니다.