Duplicata possible:
Comment divisez-vous une liste en morceaux de taille égale en Python?
Je voudrais obtenir des groupes d'éléments de taille n à partir d'une liste l:
c'est à dire:
[1,2,3,4,5,6,7,8,9] -> [[1,2,3], [4,5,6],[7,8,9]] where n is 3
Vous pouvez utiliser le groupeur à partir de recettes sur la page de documentation d'itertools:
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
Eh bien, la réponse par force brute est:
subList = [theList[n:n+N] for n in range(0, len(theList), N)]
où N
est la taille du groupe (3 dans votre cas):
>>> 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]]
Si vous voulez une valeur de remplissage, vous pouvez le faire juste avant la compréhension de la liste:
tempList = theList + [fill] * N
subList = [tempList[n:n+N] for n in range(0, len(theList), N)]
Exemple:
>>> 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]]
Voir les exemples au bas des documents itertools: http://docs.python.org/library/itertools.html?highlight=itertools#module-itertools
Vous voulez la méthode "grouper", ou quelque chose comme ça.
Que diriez-vous
a = range(1,10)
n = 3
out = [a[k:k+n] for k in range(0, len(a), n)]
answer = [L[3*i:(3*i)+3] for i in range((len(L)/3) +1)]
if not answer[-1]:
answer = answer[:-1]