Comment découper une liste en Python 3?
J'ai trouvé le code suivant compatible avec python2
from itertools import izip_longest
def grouper(n, iterable, padvalue=None):
"grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')"
return izip_longest(*[iter(iterable)]*n, fillvalue=padvalue)
Cependant, cela ne fonctionne pas avec Python 3 . Je reçois l'erreur suivante
ImportError: cannot import name izip_longest
Quelqu'un Peut-il aider?
Je voudrais convertir ma liste de [1,2,3,4,5,6,7,8,9]
à [[1,2,3],[4,5,6],[7,8,9]]
Modifier
Maintenant compatible Python3
Le Code ci-dessous est adapté de la réponse sélectionnée. Il suffit de changer le nom de izip_longest
à zip_longest
.
from itertools import zip_longest
def grouper(n, iterable, padvalue=None):
"grouper(3, 'abcdefg', 'x') --> ('a','b','c'), ('d','e','f'), ('g','x','x')"
return zip_longest(*[iter(iterable)]*n, fillvalue=padvalue)
2 réponses
Dans itertools
de Python 3, Il y a une fonction appelée zip_longest
. Il devrait faire la même chose que izip_longest
de Python 2.
Pourquoi le changement de nom? Vous remarquerez peut - être également que itertools.izip
est maintenant parti en Python 3-c'est parce que dans Python 3, la fonction intégrée zip
renvoie maintenant un itérateur, alors que dans Python 2 il renvoie une liste. Comme il n'y a pas besoin de la fonction izip
, il est également logique de renommer la variante _longest
pour plus de cohérence.
Selon la doc:
>>> s = [1,2,3,4,5,6,7,8,9]
>>> n = 3
>>> list(zip(*[iter(s)]*n))
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]