[Python] Generator, Enumerate, Zip
2022. 6. 12. 23:07ㆍLanguages/Python
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
반응형
'Languages > 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 |