๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/Python

ํŒŒ์ด์ฌ map, filter ํ•จ์ˆ˜(with. iterator)

by ์„œ์•„๋ž‘๐Ÿ˜ƒ 2023. 12. 17.

 

 

iterator(๋ฐ˜๋ณต์ž)

ํŒŒ์ด์ฌ์—์„œ iterator(๋ฐ˜๋ณต์ž)๋Š” ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. Iterator๋Š” __iter__์™€ __next__ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋กœ, __iter__๋Š” ์ž๊ธฐ ์ž์‹ ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , __next__๋Š” ๋‹ค์Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ๋” ์ด์ƒ ๋ฐ˜ํ™˜ํ•  ๊ฐ’์ด ์—†์„ ๋•Œ StopIteration ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ์ˆœํšŒ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ„๋‹จํ•œ iterator๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค

class MyIterator:
    def __init__(self, start, end):
        self.start = start
        self.end = end

    def __iter__(self):
        return self

    def __next__(self):
        if self.start >= self.end:
            raise StopIteration
        else:
            self.start += 1
            return self.start - 1

# ์‚ฌ์šฉ ์˜ˆ์‹œ
my_iter = MyIterator(1, 5)
for num in my_iter:
    print(num)

 

 

 

map๊ณผ filter

์ด์ œ map๊ณผ filter ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. map ํ•จ์ˆ˜:
    • map ํ•จ์ˆ˜๋Š” iterable์˜ ๊ฐ ์š”์†Œ์— ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด iterable์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ตฌ๋ฌธ: map(function, iterable)
    ์˜ˆ์ œ:
    # ๊ฐ ์ˆซ์ž๋ฅผ ์ œ๊ณฑํ•˜๋Š” ์˜ˆ์ œ 
    numbers = [1, 2, 3, 4, 5] 
    squared = map(lambda x: x**2, numbers) 
    print(list(squared))โ€‹



  2. filter ํ•จ์ˆ˜:
    • filter ํ•จ์ˆ˜๋Š” iterable์˜ ์š”์†Œ ์ค‘์—์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๋งŒ ๋‚จ๊ธฐ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ตฌ๋ฌธ: filter(function, iterable)
    ์˜ˆ์ œ:
# ์ง์ˆ˜๋งŒ ๋‚จ๊ธฐ๋Š” ์˜ˆ์ œ 
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
even_numbers = filter(lambda x: x % 2 == 0, numbers) 
print(list(even_numbers))

 

 

์ด๋Ÿฌํ•œ ํ•จ์ˆ˜๋“ค์€ ํŒŒ์ด์ฌ์˜ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํƒ€์ผ์„ ์ง€์›ํ•˜๋ฉฐ, ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ฐ•์กฐํ•˜๊ณ , ์ƒํƒœ ๋ณ€๊ฒฝ์„ ํ”ผํ•˜๋ ค๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

๋Œ“๊ธ€