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
๋ฐ์ํ
'๐ฏ๏ธLanguage > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ํ์ผ ์ ์ถ๋ ฅ (File I/O) + with ๋ฌธ๋ฒ (0) | 2022.06.13 |
---|---|
[Python] Iterable, Iterator (0) | 2022.06.12 |
[Python] Lambda ์ (0) | 2022.06.12 |
[Python] While / else (0) | 2022.06.12 |
[Python] ํ์ด์ฌ์ ํตํด ๊ตฌํํ DFS์ BFS (0) | 2022.05.14 |