Python

한 번 사용하고 버려지는 Iterator 객체

ju_young 2021. 6. 13. 21:30
728x90

map, reversed와 같은 함수에서 반환하는 Iterator 객체는 한 번 사용되면 지워진다. 즉, 일회성이라고 할 수 있다.

우선 map을 사용해서 확인해보자.

arr = map(int, input().split())
max_ = max(list(arr))
print(list(arr))

위 코드를 보면 arr에 입력한 숫자들을 int형으로 변환한 iterator 객체를 저장하고 max_에 최댓값을 저장한다는 것을 알 수 있다. 그리고 arr를 리스트로 출력하면 빈 리스트([])가 나온다. 왜일까??

 

차례대로 확인해보자.

  1. arr에 iterator가 저장된다.
  2. max_에 arr안에 있는 숫자들 중 최댓값이 저장된다. 이때 arr에 저장된 iterator 객체가 사용되었다고 생각하자.
  3. arr를 리스트로 출력한다.

위 과정을 확인해보면 iterator 객체가 max로 최댓값을 구할 때 한 번 사용되고 지워졌다는 것을 유추할 수 있다. 그렇다면 어떻게해야 지워지지 않을까? 방법은 간단하다. arr에 Iterator를 저장하는 것이 아닌 리스트로 저장하면 된다.

 

따라서 다음과 같이 수정할 수 있다.

arr = list(map(int, input().split()))
max_ = max(arr)
print(arr)

 

똑같이 reversed를 사용해서 확인해보자.

a = [1, 2, 3, 4]
b = reversed(a)
print(max(b))
print(list(b))

위 코드에서도 max에서 iterator객체 b가 한 번 사용되었기때문에 빈리스트가 출력된다.

 

수정하면 다음과 같다.

a = [1, 2, 3, 4]
b = list(reversed(a))
print(max(b))
print(b)
728x90

'Python' 카테고리의 다른 글

[PEP8] Comments  (0) 2022.02.26
[PEP8] When to use trailing commas  (0) 2022.02.25
[PEP8] Whitespace in Expressions and Statements  (0) 2022.02.07
[PEP8] String Quotes  (0) 2022.02.07
[PEP8] Code Lay-out  (0) 2022.02.04