๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90

 

 

Generator

 

  • Iterator์˜ ํŠน๋ณ„ํ•œ ์ข…๋ฅ˜
  • ๊ฐ ๋ฉค๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ €์žฅํ•œ ํ›„, ๋ฐ˜๋ณต์„ ํ†ตํ•ด ์š”์ฒญ๋  ๋•Œ๋งŒ ๊ฐ ๋ฉค๋ฒ„๋ฅผ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ๊ทธ๋ ‡๊ธฐ์— ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • for๋ฌธ์—์„œ ์ž์ฃผ ์“ฐ์ด๋Š” range()๊ฐ€ for ๋ฌธ์—์„œ ํ™œ์šฉ๋  ๋•Œ๋Š” Generator๋กœ ๋ณ€ํ™˜๋˜์–ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
[0, 1, 2, 3, 4]   # 0, 1, 2, 3, 4 ๋ชจ๋“  ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ

range(5)          # 0 ~ 4์˜ ์ˆ˜์—ด์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ช…๋ น๋งŒ ์ €์žฅ

 

 

Generator ๋งŒ๋“ค๊ธฐ

 

  • return ํ‚ค์›Œ๋“œ ๋Œ€์‹ , yield ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
def EventNumbers():
    n = 1
    while True:
        if (n % 2 == 0) : yield n
        n += 1
g = EvenNumbers()

print(next(g))   # 2
print(next(g))   # 4
print(next(g))   # 6

 

 


Enumerate

 

  • (Index, Value)๋กœ ์ด๋ฃจ์–ด์ง„ Iterator๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค๋‹ˆ๋‹ค. for๋ฌธ ๋“ฑ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ๋ฑ์Šค์™€ ๊ฐ’ ๋ชจ๋‘ ๋ฐ˜ํ™˜ํ•ด์ฃผ๊ธฐ์— ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
studentList = ['Tom', 'Jane', 'Susie', 'Chirs']

for index, value in enumerate(studentList):
    print(index, value)
    
# 0 Tom
# 1 Jane
# 2 Susie
# 3 Chirs

 

  • List๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ™œ์šฉํ•˜๋ ค๋ฉด list()๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
list(enumerate(studentList))

# [(0, 'Tom'), (1, 'Jane'), (2, 'Susie'), (3, 'Chris')]

 

 


Zip

 

  • ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์›์†Œ๋ณ„๋กœ ํ•ฉ์ณ์„œ Tuple๋“ค์˜ iterator๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • enumerate์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ generator์™€ ํก์‚ฌํ•œ ์„ฑ์งˆ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  • iterator๋กœ ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์ฒด๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด list()๋ฅผ ์ด์šฉํ•˜์—ฌ list๋กœ ๋งŒ๋“ค์–ด ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
x = [1, 2, 3]
y = [4, 5, 6]
zipped = zip(x, y)    # iterator for [(1, 4), (2, 5), (3, 6)]


for z in zipped:
    print(z)
    
# (1, 4)
# (2, 5)
# (3, 6)

 

  • iterator๊ฐ€ ํ•œ ๋ฐ”ํ€ด๋ฅผ ๋‹ค ๋Œ์•˜๋‹ค๋ฉด, ๋นˆ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
print(list(zipped))    # []

 

728x90
๋ฐ˜์‘ํ˜•