Comment diviser liste python en morceaux de taille égale? [dupliquer]
Doublon Possible:
Comment diviser une liste en morceaux de taille égale en Python?
python: convertir "5,4,2,4,1,0" en [[5, 4], [2, 4], [1, 0]]
[1,2,3,4,5,6,7,8,9]
->
[[1,2,3],[4,5,6],[7,8,9]]
Existe-t-il un moyen simple de le faire, sans 'for'explicite?
21
demandé sur
Community
2012-04-28 18:27:47
5 réponses
>>> x = [1,2,3,4,5,6,7,8,9]
>>> zip(*[iter(x)]*3)
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
61
répondu
jamylak
2017-05-23 10:31:22
Si vous voulez vraiment que les sous-éléments soient des listes vs tuples:
In [9]: [list(t) for t in zip(*[iter(range(1,10))]*3)]
Out[9]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Ou, si vous voulez inclure les éléments restants qui seraient tronqués par zip
, Utilisez une syntaxe de tranche:
In [16]: l=range(14)
In [17]: [l[i:i+3] for i in range(0,len(l),3)]
Out[17]: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13]]
14
répondu
the wolf
2012-04-28 17:15:17
Vous pouvez également utiliser numpy.reshape
ici:
import numpy as np
x = np.array([1,2,3,4,5,6,7,8,9])
new_x = np.reshape(x, (3,3))
Résultat:
>>> new_x
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
9
répondu
Akavall
2012-04-28 15:12:20
Voici une façon beaucoup moins "intelligente" de le faire avec la récursivité:
from itertools import chain
def groupsof(n, xs):
if len(xs) < n:
return [xs]
else:
return chain([xs[0:n]], groupsof(n, xs[n:]))
print list(groupsof(3, [1,2,3,4,5,6,7,8,9,10,11,12,13]))
0
répondu
Wes
2012-04-28 15:13:45