본문 바로가기
Studying/Python

[Python] 내장함수 enumerate 구현

by giem 2022. 5. 15.
반응형

enumerate 함수의 형식은 다음과 같다.

enumerate(iterable, start=0)

iterable한 데이터를 입력받아 iteration한 값과 start부터 증가하는 값을 묶은 튜플을 반환한다.

 

예시는 다음과 같다.

seasons = ['Spring', 'Summer', 'Fall', 'Winter']

list(enumerate(seasons))
#[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
list(enumerate(seasons, start=1))
#[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

 

구현을 해보면

def my_enumerate(sequence, start=0):
  result=[]
  for i in range(len(sequence)):
    result.append((i+start, sequence[i]))
  return result

이렇게 sequence를 for문으로 돌며 append를 하는 방식으로 구현을 했다.

 

 

하지만!!

python docs엔 아래와 같이 조금 더 pythonic한 스타일로 다음과 같이 구현이 되어 있었다.

def my_enumerate(sequence, start=0):
  i=start
  for element in sequence:
    yield i, element
    i+=1

여기서 yield는 return과 비슷하지만 데이터 대신 제너레이터를 반환하며 모든 값을 메모리에 담고 있지 않고 그때그때하나씩 생성해서 메모리에 올린다는 장점이 있다고 한다.

 

이 같은 특성 때문에 한번에 한개의 값만 순환할 수 있다고 한다.

 

마지막으로 테스트를 해보면

test1 = [60, 50, 20, 10]
test2 = [True, None, 'test']
assert list(enumerate(test1)) == list(my_enumerate(test1))
assert list(enumerate(test2, 12)) == list(my_enumerate(test2, 12))

 

테스트 아웃풋이 잘 나온 것을 확인할 수 있다.

반응형

'Studying > Python' 카테고리의 다른 글

[Python] 내장함수 range 구현  (0) 2022.05.18
[Python] 내장함수 max, min 구현  (0) 2022.05.16
[Python] 내장함수 round 구현  (0) 2022.05.15
[Python] 내장함수 abs 구현  (0) 2022.05.13
[Python] 내장함수 all 구현  (0) 2022.05.12

댓글