반응형
질문
어떻게 임의 길이의 목록을 동일한 크기의 청크로 분할할 수 있나요?
데이터 결과가 루프에 직접 사용되고 저장할 필요가 없는 경우 목록을 청크로 반복하는 방법을 참조하십시오.
문자열 입력에 대한 동일한 질문의 경우 n번째 문자마다 문자열 분할?을 참조하십시오. 동일한 기술이 일반적으로 적용되지만 일부 차이점이 있습니다.
답변
여기 균등하게 크기가 나눠지는 청크를 생성하는 생성기가 있습니다:
def chunks(lst, n):
"""리스트에서 연속적인 n 크기의 청크를 생성합니다."""
for i in range(0, len(lst), n):
yield lst[i:i + n]
import pprint
pprint.pprint(list(chunks(range(10, 75), 10)))
[[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
[70, 71, 72, 73, 74]]
Python 2의 경우, range
대신 xrange
를 사용합니다:
def chunks(lst, n):
"""리스트에서 연속적인 n 크기의 청크를 생성합니다."""
for i in xrange(0, len(lst), n):
yield lst[i:i + n]
아래는 리스트 컴프리헨션 원라이너입니다. 그러나 코드를 이해하기 쉽게 만드는 것이 더 좋으므로 위의 방법이 선호됩니다. Python 3의 경우:
[lst[i:i + n] for i in range(0, len(lst), n)]
Python 2의 경우:
[lst[i:i + n] for i in xrange(0, len(lst), n)]
반응형
댓글