web-dev-qa-db-ja.com

pythonの要素をn個の要素でグループ化する方法は?

可能性のある複製:
リストをPythonで均等なサイズのチャンクにどのように分割しますか?

リストlからサイズn要素のグループを取得したい:

すなわち:

[1,2,3,4,5,6,7,8,9] -> [[1,2,3], [4,5,6],[7,8,9]] where n is 3
28
TheOne

Itertoolsドキュメントページの recipes からgrouperを使用できます。

def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)
23
Mark Byers

まあ、総当たりの答えは:

subList = [theList[n:n+N] for n in range(0, len(theList), N)]

ここで、Nはグループサイズです(あなたの場合は3):

>>> theList = list(range(10))
>>> N = 3
>>> subList = [theList[n:n+N] for n in range(0, len(theList), N)]
>>> subList
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]

フィル値が必要な場合は、リスト内包表記の直前にこれを行うことができます。

tempList = theList + [fill] * N
subList = [tempList[n:n+N] for n in range(0, len(theList), N)]

例:

>>> fill = 99
>>> tempList = theList + [fill] * N
>>> subList = [tempList[n:n+N] for n in range(0, len(theList), N)]
>>> subList
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 99, 99]]
22
Mike DeSimone

Itertoolsドキュメントの下部にある例を参照してください: http://docs.python.org/library/itertools.html?highlight=itertools#module-itertools

「ハタ」メソッド、またはそれに似た方法が必要です。

3
Adam Vandenberg

いかがですか

a = range(1,10)
n = 3
out = [a[k:k+n] for k in range(0, len(a), n)]
2
sizzzzlerz
answer = [L[3*i:(3*i)+3] for i in range((len(L)/3) +1)]
if not answer[-1]:
    answer = answer[:-1]
0
inspectorG4dget