Programing/Python programming

Python for loop, map, Filter, Reduce 정리

sosal 2022. 12. 27. 10:57
반응형

Python은 아무래도 컴파일 되는 것이 아닌, 스크립트 언어다 보니

단순 반복연산에 대한 for loop는 상당히 느립니다.

 

따라서 map, filter, reduce 등으로 대체하는 것을 권장하고 있는데,

세 가지 문법에 대해서 가볍게 정리해보겠습니다.

 

 

import math
import time
import numpy as np

# 0 <= x < 100 사이 값을 1000개 생성
Data = np.random.randint(0, 100, 1000).tolist()

# Regular function
def square(x):
    return x*x

# Lambda function
Square_lambda = lambda x: x*2

 

 

For Loop와 List comprehension

 

# 1. For loop
result = list()
for Integer in Data:
    result.append(square(Integer))


# 2. List comprehension
result = [square(Integer) for Integer in Data]

 

 

 

Map function

# Map function의 parameter는 map(function, iterable) 형태로 되어있다.
# iterable object (list, tuple, set 등의 데이터) 에 대해 function을 모두 적용해준다.
result = list(map(square, Data))
result = list(map(Square_lambda, Data))

 

 

 

Filter function

# filter의 parameter는 filter(function, iterable) 형태로 되어있다.
# filter 안에 들어가는 function은 boolean을 리턴하는 함수 형태여야 한다.
def condition(x):
    return x < 50

condition_lambda = lambda x: x<50

result = list(filter(condition, Data))
result = list(filter(condition_lambda, Data))

 

 

 

Reduce function

# reduce도 마찬가지로 reduce(func, iterable) 형태로 생겼습니다.
# 모든 데이터에 대해 동일한 function을 cumulative하게 적용하는 것 입니다.

from functools import reduce
Data = [1, 2, 3, 4, 5]

# With Lambda function
reduce(lambda x,y: x+y, Data)
# return 15


# reduce의 function이 어떻게 동작하는지 출력과 함께 보기
def addition(x, y):
    print(x, y)
    return x+y

reduce(addition, Data)
In [84]: reduce(addition, input_list)
1 2
3 3
6 4
10 5
Out[84]: 15

 

Reduce function의 동작방식