Python — 매핑, 필터링, 축소
지도
먼저 맵 기능이 정확히 필요한 이유와 맵 기능이 작업을 줄이고 코드를 보다 효율적으로 만드는 데 어떻게 도움이 되는지 이해하겠습니다.
아래와 같이 작업할 목록이 있지만 목록의 문제는 목록에 있는 모든 요소가 문자열 형식이므로 수치 연산을 수행하려고 하면 결과가 나오지 않는다는 것입니다.
l1 = ["3","5","9","12","25"]
x = l1[0]+1
print(x)
----------------------------------------------------------------------
-----
TypeError Traceback (most recent call
last)
Input In [1], in <cell line: 2>()
1 l1 = ["3","5","9","12","25"]
----> 2 x = l1[0]+1
3 print(x)
TypeError: can only concatenate str (not "int") to str
이제 이 문제를 해결하는 한 가지 방법은 for 루프입니다. 살펴보겠습니다.
for i in range(len(l1)):
l1[i] = int(l1[i])
x = l1[0]+1
print(x)
4
l2라는 또 다른 목록을 가져와 동일한 작업을 다시 수행합니다.
l2 = ["3","5","9","12","25"]
l2 = list(map(int,l2))
y = l2[0]+1
print(y)
4
이제 몇 가지 다른 예도 살펴보겠습니다. 전체 목록의 제곱 값을 찾고 싶다고 가정하고 map 함수의 도움으로 어떻게 할 수 있는지 봅시다.
먼저, 주어진 숫자의 제곱 값을 반환하는 함수 'sq'를 작성해 봅시다.
def sq(a):
return a*a
l3 = [3,5,7,2,9]
l4 = list(map(sq,l3))
print(l4)
[9, 25, 49, 4, 81]
이제 좀 더 복잡한 것을 살펴보겠습니다. 지금 달성하려는 것은 0,8에서 숫자의 제곱과 세제곱을 가져와 목록에 저장하는 것입니다. 이제 map 함수, lambda 함수 및 def 키워드를 사용하여 사각형 및 큐브 함수를 설명합니다. 그런 다음 for 루프를 사용하여 목록을 만듭니다.
def sq(a):
return a*a
def cube(a):
return a*a*a
func = [sq,cube]
for i in range(8):
rslt = list(map(lambda x:x(i) ,func))
print(rslt)
[0, 0]
[1, 1]
[4, 8]
[9, 27]
[16, 64]
[25, 125]
[36, 216]
[49, 343]
이름에서 알 수 있듯이 filter 함수는 주어진 iterable 세트를 필터링하는 데 도움이 됩니다. 인수로 iterables를 필터링할 명시된 함수를 취한 다음 iterables 자체를 인수로 취합니다. 아래 3가지 유형의 필터가 제공됩니다. 하나는 목록에서 10보다 큰 숫자를 필터링하고, 하나는 10보다 작은 숫자를 필터링하며, 하나는 숫자가 10보다 크고 15보다 작아야 한다는 여러 조건을 갖습니다.
l1 = [34,12,5,8,11,14,19,10,1,50]
def grt_condi(num):
return num>10
def lsr_condi(num):
return num<10
def multi_condi(num):
return num>10 and num<15
l2 = list(filter(grt_condi,l1))
l3 = list(filter(lsr_condi,l1))
l4 = list(filter(multi_condi,l1))
print(l2)
print(l3)
print(l4)
[34, 12, 11, 14, 19, 50]
[5, 8, 1]
[12, 11, 14]
reduce 함수가 무엇을 하고 어떤 문제를 해결하는지 이해합시다. 이를 이해하기 위해 먼저 문제 설명과 이를 해결하기 위한 전통적인 방법을 살펴보겠습니다.
목록이 있고 목록에 있는 모든 정수의 합계를 얻고 싶다고 가정해 봅시다.
l6 = [2,3,6,5,8,9,10]
x = 0
for i in l6:
x = x+i
print(x)
43
from functools import reduce
l7 = reduce(lambda x,y:x+y , l6)
print(l7)
43
더 많은 콘텐츠를 보려면 내 Medium 프로필 및 LinkedIn 페이지를 팔로우하세요 —https://www.linkedin.com/in/chandan-sengupta/

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































