본문 바로가기
파이썬

파이썬 목록을 n 그룹으로 분할하는 다른 방법

by º기록 2021. 1. 18.
반응형

임의의 길이 L 목록이 있다고 가정 해 보겠습니다.

L = list(range(1000))

목록을 n 그룹으로 나누는 가장 좋은 방법은 무엇입니까? 이것은 제가 생각 해낼 수있는 최고의 구조이며 어떤 이유로 작업을 수행하는 가장 좋은 방법이라고 생각하지 않습니다.

n = 25
for i in range(0, len(L), n):
    chunk = L[i:i+25]

이 작업을 수행하는 내장 기능이 있습니까?

편집 : 초기 답변은 내 for 루프를 아이디어가 아닌 listcomp로 재 작업하고 있습니다. 당신은 기본적으로 제 정확한 답을 다른 형태로 돌려주고 있습니다. 목록에 대한 가상의 .split 과 같이이를 수행 할 수있는 대체 수단이 있는지 확인하고 있습니다. 나는 또한 지난 밤에 작성한 코드에서 이것을 생성기로 사용합니다.

def split_list(L, n):
    assert type(L) is list, "L is not a list"
    for i in range(0, len(L), n):
        yield L[i:i+n]

 

해결 방법

 


def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return itertools.zip_longest(*args, fillvalue=fillvalue)

사용 예 :

>>> list(grouper(3, range(9)))
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
>>> list(grouper(3, range(10)))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, None, None)]

마지막 그룹을 fillvalue 로 채우는 대신 다른 그룹보다 짧게하려면 다음과 같이 할 수 있습니다. 다음과 같이 코드를 변경하십시오.

>>> def mygrouper(n, iterable):
...     args = [iter(iterable)] * n
...     return ([e for e in t if e != None] for t in itertools.zip_longest(*args))
... 
>>> list(mygrouper(3, range(9)))
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
>>> list(mygrouper(3, range(10)))
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]

 

참조 페이지 https://stackoverflow.com/questions/1624883

 

 

반응형

댓글