4
votes

Boucle à travers le tableau en quatre éléments mais de manière consécutive

J'utilise le code suivant pour parcourir un tableau.

arr = [1 ,2 ,3 ,4 ,5 , 6,7]
    for a, b, c in zip(*[iter(arr)]*3):
        print (a, b, c)

Il récupère la sortie en deux parties comme (1,2,3) et (4,5,6) p>

Cependant, je veux que la sortie soit consécutive dans le sens (1,2,3), (2,3,4), (3,4,5), (4,5,6), (5 , 6,7) mais aussi de manière plus rapide. Existe-t-il un autre moyen en dehors de l'iter pour y parvenir?


3 Réponses :


3
votes

Utilisez simplement le slicing:

>>> from itertools import islice
>>> list(zip(l, islice(l, 1, None), islice(l, 2, None)))
[(0, 1, 2), (1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7), (6, 7, 8), (7, 8, 9)]

Ce sera encore mieux si vous utilisez itertools.islice

>>> l = list(range(10))
>>> list(zip(l, l[1:], l[2:]))
[(0, 1, 2), (1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7), (6, 7, 8), (7, 8, 9)]


0 commentaires

3
votes

Vous pouvez également boucler sur des tranches de taille n

n = 3
for a, b, c in [arr[i:i+n] for i in range(len(arr)-(n-1))]:
    print(a, b, c)
#1 2 3
#2 3 4
#3 4 5
#4 5 6
#5 6 7


0 commentaires

2
votes
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7)]

0 commentaires