티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

How to iterate over a list in chunks

리스트를 청크(chunk) 단위로 반복하는 방법

 문제 내용 

I have a Python script which takes as input a list of integers, which I need to work with four integers at a time. Unfortunately, I don't have control of the input, or I'd have it passed in as a list of four-element tuples. Currently, I'm iterating over it this way:

저는 입력으로 주어지는 정수 리스트를 4개씩 처리해야 하는 파이썬 스크립트를 작성해야 합니다. 하지만 입력값이 4개씩 묶인 튜플 리스트 대신 리스트 형태로 전달됩니다. 현재 저는 다음과 같은 방법으로 이를 반복하고 있습니다:
for i in range(0, len(ints), 4):
    # dummy op for example code
    foo += ints[i] * ints[i + 1] + ints[i + 2] * ints[i + 3]

 

It looks a lot like "C-think", though, which makes me suspect there's a more pythonic way of dealing with this situation. The list is discarded after iterating, so it needn't be preserved. Perhaps something like this would be better?

하지만 이는 "C-think" 스타일이라 파이썬 답지 않다고 생각됩니다. 이 리스트는 반복 후에 버려질 예정이므로 유지할 필요는 없습니다. 아마도 이와 같은 방법이 더 나을지도 모릅니다:
while ints:
    foo += ints[0] * ints[1] + ints[2] * ints[3]
    ints[0:4] = []

 

Still doesn't quite "feel" right, though. :-/

하지만 이 방법도 아직 파이썬스러움에는 부족한 느낌이 듭니다. :-/

 

Related question: How do you split a list into evenly sized chunks in Python?

관련 질문: 파이썬에서 리스트를 동일한 크기의 청크(chunk)로 분할하는 방법은 무엇인가요?

 

 

 

 높은 점수를 받은 Solution 

def chunker(seq, size):
    return (seq[pos:pos + size] for pos in range(0, len(seq), size))

Works with any sequence:

어떤 시퀀스든 동작합니다:
text = "I am a very, very helpful text"

for group in chunker(text, 7):
   print(repr(group),)
# 'I am a ' 'very, v' 'ery hel' 'pful te' 'xt'

print('|'.join(chunker(text, 10)))
# I am a ver|y, very he|lpful text

animals = ['cat', 'dog', 'rabbit', 'duck', 'bird', 'cow', 'gnu', 'fish']

for group in chunker(animals, 3):
    print(group)
# ['cat', 'dog', 'rabbit']
# ['duck', 'bird', 'cow']
# ['gnu', 'fish']

 

 

 가장 최근 달린 Solution 

The more-itertools package has chunked method which does exactly that:

more-itertools 패키지에는 이를 정확히 수행하는 chunked 메소드가 있습니다:
import more_itertools
for s in more_itertools.chunked(range(9), 4):
    print(s)

 

Prints

출력 결과는 다음과 같습니다:
[0, 1, 2, 3]
[4, 5, 6, 7]
[8]

 

chunked returns the items in a list. If you'd prefer iterables, use ichunked.

chunked는 리스트의 항목을 반환합니다. 이터러블을 원한다면 ichunked를 사용하세요.

 

 

 

출처 : https://stackoverflow.com/questions/434287/how-to-iterate-over-a-list-in-chunks

반응형
댓글
공지사항
최근에 올라온 글