슬라이싱 연산자를 활용한 기본 방법
파이썬에서 리스트를 동일한 크기의 청크(chunk)로 나누는 가장 간단한 방법은 슬라이싱 연산자(slice operator)를 반복적으로 사용하면서 시작 위치와 끝 위치를 고정된 값만큼 이동시키는 것입니다.
다음 예제에서는 12개의 요소를 가진 리스트가 있습니다. 이 리스트를 길이가 4인 리스트 3개로 분할해 보겠습니다.
l = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]
x = 0
y = 12
for i in range(x, y, 4):
x = i
print(l[x:x+4])실행 결과는 다음과 같습니다.
[10, 20, 30, 40] [50, 60, 70, 80] [90, 100, 110, 120]
range(x, y, 4)는 0부터 12까지 4씩 증가하며 반복하고, 각 단계마다 l[x:x+4]로 현재 위치에서 4개의 요소를 잘라내어 새로운 리스트를 만듭니다.
리스트 컴프리헨션으로 더 간결하게
위 코드를 리스트 컴프리헨션(list comprehension)을 사용하면 한 줄로 훨씬 깔끔하게 표현할 수 있습니다.
l = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120] chunks = [l[i:i+4] for i in range(0, len(l), 4)] print(chunks)
실행 결과:
[[10, 20, 30, 40], [50, 60, 70, 80], [90, 100, 110, 120]]
이 방식은 리스트 길이를 하드코딩하지 않고 len(l)로 자동 계산하므로, 어떤 크기의 리스트에도 재사용할 수 있다는 장점이 있습니다.
재사용 가능한 함수로 만들기
여러 곳에서 청크 분할이 필요하다면 함수로 일반화하는 것이 좋습니다.
def chunk_list(lst, size):
return [lst[i:i+size] for i in range(0, len(lst), size)]
numbers = list(range(1, 13))
result = chunk_list(numbers, 5)
print(result)실행 결과:
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12]]
리스트 길이가 청크 크기로 나누어 떨어지지 않더라도 마지막 청크에는 남은 요소들이 그대로 포함되므로 데이터 손실이 없습니다.
정리
리스트를 동일한 크기로 나눌 때는 슬라이싱 연산자와 range()의 스텝(step) 값을 조합하는 것이 핵심입니다. 간단한 작업이라면 인덱스 변수를 직접 다루는 방식도 충분하지만, 실무에서는 리스트 컴프리헨션이나 재사용 가능한 함수 형태로 구현하는 것이 가독성과 유지보수 측면에서 훨씬 유리합니다.