566 votes

Quel est le moyen plus « Pythonique » pour parcourir une liste de morceaux ?

J'ai un script Python qui prend en entrée une liste d'entiers, de qui j'ai besoin de travailler avec quatre entiers à la fois. Malheureusement, je n'ai pas le contrôle de l'entrée, ou j'avais passé dans une liste de quatre-élément n-uplets. Actuellement, je suis une itération sur elle de cette façon:

for i in xrange(0, len(ints), 4):
    # dummy op for example code
    foo += ints[i] * ints[i + 1] + ints[i + 2] * ints[i + 3]

Il ressemble beaucoup à "C-à-penser", mais, ce qui me fait soupçonner il y a de plus pythonic façon de faire face à cette situation. La liste est rejetée après une itération, de sorte qu'il n'a pas besoin d'être conservé. Peut-être quelque chose comme ce serait mieux?

while ints:
    foo += ints[0] * ints[1] + ints[2] * ints[3]
    ints[0:4] = []

N'est toujours pas tout à fait "sentir" le droit, si. :-/

Liés à la question: Comment vous répartissez vous une liste en morceaux de taille égale en Python?

481voto

nosklo Points 75862
<pre><code></code><p>Simple. Facile. Rapide. Fonctionne avec n’importe quel ordre :</p><pre><code></code></pre></pre>

386voto

Craz Points 3664

Modification de la section recettes du docs itertools de Python :

Exemple de
Dans pesudocode pour que l’exemple laconique.

Remarque :`` Nouveautés de Python 2.6

176voto

S.Lott Points 207588
je suis fan de

27voto

Markus Jarderot Points 33893
<pre><code></code><p>Une autre façon :</p><pre><code></code></pre></pre>

12voto

Pedro Henriques Points 835
from itertools import izip_longest

def chunker(iterable, chunksize, filler):
    return izip_longest(*[iter(iterable)]*chunksize, fillvalue=filler)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X