Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python – iter와 islice를 활용해 리스트를 지정된 길이로 분할하는 방법

파이썬에서 하나의 리스트를 지정한 길이 단위로 여러 개의 하위 리스트로 나누어야 할 때가 있습니다. 이럴 때 리스트 컴프리헨션(list comprehension)과 함께 iter 메서드, 그리고 itertools 모듈의 islice 메서드를 활용하면 아주 간결하게 처리할 수 있습니다.

예제 코드

아래는 실제 동작 과정을 보여주는 예제입니다.

from itertools import islice

my_list = [11, 22, 33, 34, 45, 26, 87, 11]
print("The list is :")
print(my_list)

length_to_split = [2, 5, 3]
print("The split length list is :")
print(length_to_split)

temp = iter(my_list)
my_result = [list(islice(temp, element)) for element in length_to_split]

print("The result is :")
print(my_result)

실행 결과

The list is :
[11, 22, 33, 34, 45, 26, 87, 11]
The split length list is :
[2, 5, 3]
The result is :
[[11, 22], [33, 34, 45, 26, 87], [11]]

코드 설명

  • itertools 모듈에서 islice를 임포트하여 필요한 기능을 준비합니다.

  • 정수로 이루어진 원본 리스트를 정의하고 콘솔에 출력합니다.

  • 분할할 길이 정보를 담고 있는 또 다른 정수 리스트를 정의하고 콘솔에 출력합니다.

  • 원본 리스트에 iter 메서드를 호출해 반복자(iterator)를 생성한 뒤 변수에 할당합니다.

  • 리스트 컴프리헨션으로 분할 길이 리스트의 요소를 하나씩 순회하며, islice를 사용해 해당 길이만큼 요소를 잘라냅니다.

  • 잘라낸 결과를 리스트로 변환하여 새로운 변수에 저장합니다.

  • 최종 분할 결과가 콘솔에 출력됩니다.

동작 원리

여기서 핵심은 islice가 반복자의 현재 위치부터 지정한 개수만큼만 소비한다는 점입니다. 따라서 첫 번째 호출에서 앞의 2개 요소([11, 22])를 가져간 후, 두 번째 호출에서는 그다음 위치인 33부터 5개 요소([33, 34, 45, 26, 87])를, 마지막에는 남은 1개 요소([11])를 가져오게 됩니다. 이처럼 반복자의 상태가 연속적으로 유지되기 때문에 별도의 인덱스 계산 없이도 깔끔하게 리스트를 분할할 수 있습니다.