반응형
임의의 길이 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
반응형
'파이썬' 카테고리의 다른 글
파이썬 기존 값보다 큰 값의 첫 번째 Numpy (0) | 2021.01.18 |
---|---|
파이썬 아름다운 수프와 레를 사용하여 특정 텍스트를 포함하는 특정 클래스로 스팬을 찾는 방법은 무엇입니까? (0) | 2021.01.18 |
파이썬 mongodb에서 pandas로 데이터를 가져 오는 방법은 무엇입니까? (0) | 2021.01.18 |
파이썬 Python을 사용하여 국가 이름을 ISO 3166-1 alpha-2 값으로 변환하는 방법 (0) | 2021.01.18 |
파이썬 Django에서 로컬 및 프로덕션 설정을 관리하는 방법은 무엇입니까? (0) | 2021.01.18 |
댓글