[Python] Generator, Enumerate, Zip

2022. 6. 12. 23:07Languages/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