스택큐힙리스트

파이썬 3에서 filter, map 및 reduce를 사용하는 방법 본문

카테고리 없음

파이썬 3에서 filter, map 및 reduce를 사용하는 방법

스택큐힙리스트 2023. 4. 21. 06:13
반응형

filter , map , 그리고 reduce는 Python 2에서 완벽하게 작동합니다. 다음은 예입니다:

>>> def f(x):

return x % 2 != 0 and x % 3 != 0

>>> filter(f, range(2, 25))

[5, 7, 11, 13, 17, 19, 23]

>>> def cube(x):

return x*x*x

>>> map(cube, range(1, 11))

[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

>>> def add(x,y):

return x+y

>>> reduce(add, range(1, 11))

55

하지만 Python 3에서는 다음과 같은 출력을 받습니다:

>>> filter(f, range(2, 25))

>>> map(cube, range(1, 11))

>>> reduce(add, range(1, 11))

Traceback (most recent call last):

File , line 1, in

reduce(add, range(1, 11))

NameError: name 'reduce' is not defined

이게 왜 그런지 설명해주시면 감사하겠습니다.

자세한 설명을 위한 코드 스크린샷:

답변 1

당신은 What's New In Python 3.0에서 변경 사항을 읽을 수 있습니다. 많은 것이 변경되었으므로 2.x에서 3.x로 이동할 때 꼼꼼히 읽어 보시는 것이 좋습니다.

이곳의 전체 답변은 문서에서의 인용구입니다.

Views And Iterators Instead Of Lists

일부 잘 알려진 API는 더 이상 목록을 반환하지 않습니다.

[...]

map()과 filter() r는 이터레이터를 반환합니다. 만약 당신이 진짜 리스트가 필요하다면, 빠른 수정 방법은 예를 들어 list(map(...)) , 입니다. 그러나 보통은 리스트 내포(list comprehension)를 사용하거나 (특히 코드 원본이 람다 함수를 사용하는 경우) 리스트가 전혀 필요하지 않도록 코드를 다시 작성하는 것이 더 좋습니다. 특히, 함수의 부작용을 위해 map()이 사용되는 경우가 매우 까다롭습니다. 올바른 변환은 일반 for 루프를 사용하는 것입니다 (리스트를 생성하는 것은 낭비일 뿐입니다).

[...]

Builtins

[...]

제거 reduce() . 진짜 필요하면 functools.reduce()를 사용하세요. 하지만 대부분의 경우 명시적인 for 루프가 더 읽기 쉽습니다.

[...]

[번역할 내용이 제공되지 않았습니다.]

답변 2

Python 3에서 filter, map 및 reduce를 사용하는 방법

Python 3은 filter, map 및 reduce와 같은 매우 유용한 함수를 제공합니다. 이러한 함수는 특히 데이터를 처리하거나 변환하는 데 유용합니다. 이번 글에서는 Python 3에서 filter, map 및 reduce를 사용하는 방법에 대해 알아보겠습니다.

filter를 사용하여 필터링하기

filter 함수는 시퀀스에서 특정 조건을 충족하는 요소를 필터링합니다. 예를 들어, 짝수 번호만 포함하는 리스트가 있다고 가정해 봅시다. 이때 filter 함수를 사용하여 이러한 짝수 번호만 필터링할 수 있습니다.

코드는 다음과 같습니다.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

even_numbers = list(filter(lambda x: x % 2 == 0, numbers))

위 코드에서 lambda 함수는 x를 인수로 사용하고 x가 짝수인지 여부를 판단합니다. 이렇게 필터링된 even_numbers 리스트는 다음과 같은 출력을 생성합니다.

[2, 4, 6, 8, 10]

map을 사용하여 변환하기

map 함수는 시퀀스에서 모든 요소를 변환합니다. 예를 들어, 리스트의 각 요소에 대한 제곱을 계산하려면 map 함수를 사용할 수 있습니다.

코드는 다음과 같습니다.

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

squared_numbers = list(map(lambda x: x**2, numbers))

위 코드에서 lambda 함수는 x를 인수로 사용하고 해당 요소의 제곱 값을 반환합니다. 이렇게 변환된 squared_numbers 리스트는 다음과 같은 출력을 생성합니다.

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

reduce로 축소하기

reduce 함수는 시퀀스를 하나의 값으로 축소합니다. 예를 들어, 시퀀스의 모든 요소를 더해야 하는 경우 reduce 함수를 사용할 수 있습니다.

코드는 다음과 같습니다.

from functools import reduce

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

sum = reduce(lambda x, y: x + y, numbers)

위 코드에서 functools 모듈에서 reduce 함수를 가져와 사용합니다. lambda 함수는 두 인수를 받아서 합을 계산합니다. 이렇게 축소된 합계는 다음과 같은 출력을 생성합니다.

55

따라서 Python 3에서 filter, map 및 reduce 함수를 사용하여 데이터를 필터링, 변환하고 축소할 수 있습니다. 이러한 함수는 데이터 처리를 보다 효율적으로 수행할 수 있도록 도와줍니다.

반응형
Comments