<์์ ์ถ์ฒ>
2) map, filter
์์ ๋ฐฐ์ด ์ ๋๋ ์ดํฐ(`generator`)๋ ์ดํฐ๋ ์ดํฐ(`iterator`) ์ ๋๋ค. ๋ค๋ง ์ ๋๋ ์ดํฐ ํํ์ ๋๋ `yield`ํค์๋๋ฅผ ํตํด ์์ฑํ ์ดํฐ๋ ์ดํฐ๋ ๊ตฌ๋ถ์ ...
wikidocs.net
์ฌ์ฉ๋ฒ์ด ์ต์์น ์์ ํญ์ ์ฐพ์๋ณด๋ map, filterํจ์๋ฅผ ํ์คํ ์ ๋ฆฌํด ๋๋๋ค.
map(์ ์ฉ์ํฌ ํจ์, ์ ์ฉํ ์์๋ค)
: ๋ฐ๋ณต๊ฐ๋ฅํ iterable ๊ฐ์ฒด๋ฅผ ๋ฐ์์ ๊ฐ ์์์ ํจ์๋ฅผ ์ ์ฉํด์ฃผ๋ ํจ์
#1. for๋ฌธ ์ฌ์ฉ
def add_1(n):
return n + 1
target = [1, 2, 3, 4, 5]
result = []
for value in target:
result.append(add_1(value))
print(result)
[2, 3, 4, 5, 6]
#2. mapํจ์ ์ฌ์ฉ
# map ํจ์ ์ฌ์ฉ
def add_1(n):
return n + 1
target = [1, 2, 3, 4, 5]
result = map(add_1, target)
print(result) # ์ถ๋ ฅ๊ฒฐ๊ณผ: iterator -> nextํจ์๋ฅผ ์ด์ฉํ์ฌ ํ์ธ ๊ฐ๋ฅ
print(list(result)) # list ํ์
์ผ๋ก ํ๋ณํ ํ์ฌ ํ์ธ ๊ฐ๋ฅ
<map object at 0x000001B7457EF3C8>
[2, 3, 4, 5, 6]
#3. mapํจ์ + lambda ์ฌ์ฉ
# map + lambda: add_1 ๊ณผ ๊ฐ์ ํจ์๊ฐ ์ฌ์ฌ์ฉ ๋ชฉ์ ์ด ์๋ค๋ฉด lambda ํจ์ ์ฌ์ฉ
target = [1, 2, 3, 4, 5]
result = map(lambda x: x + 1, target)
print(list(result))
[2, 3, 4, 5, 6]
# ์ถ๊ฐ ์์ : ๋ชจ๋ ์์๋ค์ str ํ์
์ผ๋ก ๋ณ๊ฒฝ
target = [1, 2, 3, 4, 5]
list(map(str, target))
['1', '2', '3', '4', '5']
filter(์ ์ฉ์ํฌ ํจ์, ์ ์ฉํ ์์๋ค)
: ํน์ ์กฐ๊ฑด์ผ๋ก ๊ฑธ๋ฌ์ ๊ฑธ๋ฌ์ง ์์๋ค๋ก iterator ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ๋ฆฌํด
#1. for๋ฌธ ์ฌ์ฉ
target = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = []
def is_even(n):
return True if n % 2 == 0 else False
for value in target:
if is_even(value):
result.append(value)
print(result)
#2. filter ํจ์ ์ฌ์ฉ
[2, 4, 6, 8, 10]
# filter ํจ์ ์ฌ์ฉ
target = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def is_even(n):
return True if n % 2 == 0 else False
result = filter(is_even, target)
print(list(result))
[2, 4, 6, 8, 10]
#3. filter ํจ์ + lambda ์ฌ์ฉ
# filter + lambda
target = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = filter(lambda x: x%2==0, target)
print(list(result))
[2, 4, 6, 8, 10]
์์ฉ: Map + Filter ์์
## target๋ฆฌ์คํธ์ ๋ชจ๋ ์์๋ค์ 1์ ๋ํ๊ณ ํ์๋ง return
target = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(filter(lambda x: x%2!=0, map(lambda x: x+1, target)))
[3, 5, 7, 9, 11]