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

파이썬에서 리스트를 N 크기의 청크로 나누는 방법

이 글에서는 사용자가 입력한 리스트와 지정된 청크(chunk) 크기를 기준으로, 리스트를 해당 크기만큼 잘라서 나누는 방법을 알아봅니다. 두 가지 방법을 소개하며, 각각 yield 키워드를 활용하는 제너레이터 방식과 리스트 컴프리헨션(List Comprehension)을 활용하는 방식입니다.

방법 1: yield 키워드 활용하기

첫 번째 방법은 yield 키워드를 사용하는 것입니다. yield는 함수가 중단된 위치부터 다시 실행을 이어갈 수 있게 해주며, 이것이 일반 함수와 제너레이터 함수의 가장 큰 차이점입니다. 즉, 함수가 한 번에 모든 결과를 반환하는 대신, 호출될 때마다 하나씩 값을 순차적으로 생성합니다.

예제 코드

def list_chunks(l, n):
   for i in range(0, len(l), n):
      yield l[i:i + n]

A = list()
n = int(input("리스트의 크기를 입력하세요: "))
print("숫자를 입력하세요")
for i in range(int(n)):
   p = int(input("Size="))
   A.append(int(p))
   print(A)

chunk_size = int(input("청크 크기를 입력하세요: "))
my_list = list(list_chunks(A, chunk_size))
print("청크 리스트:", my_list)

실행 결과

Enter the size of the List 6
Enter the number
Size= 12
[12]
Size= 33
[12, 33]
Size= 11
[12, 33, 11]
Size= 56
[12, 33, 11, 56]
Size= 44
[12, 33, 11, 56, 44]
Size= 89
[12, 33, 11, 56, 44, 89]
Enter Chunk Size 3
List of Chunks [[12, 33, 11], [56, 44, 89]]

위 실행 결과에서 볼 수 있듯이, 6개의 요소를 가진 리스트가 청크 크기 3을 기준으로 [12, 33, 11][56, 44, 89], 두 개의 하위 리스트로 나뉘었습니다.

방법 2: 리스트 컴프리헨션 활용하기

두 번째 방법은 리스트 컴프리헨션을 사용하여 단 한 줄의 코드로 문제를 해결하는 것입니다. 슬라이싱 인덱스를 계산식으로 처리하므로 더욱 간결하고 파이썬다운 코드가 됩니다.

예제 코드

A = list()
n = int(input("리스트의 크기를 입력하세요: "))
print("숫자를 입력하세요")
for i in range(int(n)):
   p = int(input("Size="))
   A.append(int(p))
   print(A)

chunk_size = int(input("청크 크기를 입력하세요: "))
my_final = [A[i * n:(i + 1) * n] for i in range((len(A) + n - 1) // n)]
print("청크 리스트:", my_final)

실행 결과

Enter the size of the List 6
Enter the number
Size= 23
[23]
Size= 34
[23, 34]
Size= 12
[23, 34, 12]
Size= 56
[23, 34, 12, 56]
Size= 33
[23, 34, 12, 56, 33]
Size= 22
[23, 34, 12, 56, 33, 22]
Enter Chunk Size 3
List of chunks: [[23, 34, 12], [56, 33, 22]]

(len(A) + n - 1) // n은 전체 요소 개수를 청크 크기로 나눈 뒤 올림 처리하는 식으로, 마지막 청크가 완전하지 않아도 남은 요소들이 포함되도록 보장합니다.

마무리

정리하면, 방법 1은 제너레이터를 사용해 메모리를 효율적으로 관리할 수 있어 대용량 데이터에 적합하고, 방법 2는 코드가 간결하여 소규모 리스트를 빠르게 처리할 때 유용합니다. 상황에 맞게 두 방법을 선택하여 사용하시면 됩니다.