파이썬으로 리스트를 무한히 순환하고싶을때 ( 일정 패턴을 반복해서 처리하고 싶을때 ) 유용한 cycle 함수를 알아보겠습니다.

from itertools import cycle

if __name__ == '__main__':
    fruits = ['apple', 'orange', 'mango', ]
    dic = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
    listCycle = cycle(fruits)
    dicCycle = cycle(dic)

    print("========== list cycle")
    for i in range(10):
        print(next(listCycle))
    print("=====================")

    print("\n")
    
    print("===== dictionary cycle")
    for i in range(10):
        dicKey = next(dicCycle)
        print(dicKey, dic[dicKey])
    print("=====================")

cycle 은  itertools 모듈을 임포트해야 사용 할 수 있습니다.

모듈을 임포트한 후 순환하고 싶은 리스트를 cycle 함수의 인자로 넣어주면 무한 순환이 가능한 iterator(반복자)를 리턴합니다.

리턴받은 iterator 는 각 요소를 반환하며 반환가능한 요소가 모두 소진된경우 ( 리스트를 모두 순환한 경우 ) 다시 리스트의 처음요소부터 순차적으로 반환합니다.

이쯤되니 cycle이 어떤식으로 동작하는지 궁금하네요.

itertools 라이브러리 문서를 살펴보면 작동방식에 대한 설명이 있습니다.
https://docs.python.org/3/library/itertools.html

def cycle(iterable):
    # cycle('ABCD') --> A B C D A B C D A B C D ...
    saved = []
    for element in iterable:
        yield element
        saved.append(element)
    while saved:
        for element in saved:
              yield element

cycle 함수의 인자로 interable ( 반복가능한 객체 )를 전달하면,
1차적으로 요소를 모두 순환하면서 별도의 변수에 동일한 리스트를 복사해두고

인자로 전달받은 요소를 모두 순환하면, 이후에는 복사해둔 리스트를 무한히 순환을 반복하며 각 요소들을 리턴하는 방식입니다.

이해가 되셨나요? ( 저는 한참을 들여다보고나서 이해했습니다.  😭 )

여러분은 잘 이해하고 사용하시길 바라며 이만 마치겠습니다.

감사합니다. 😄