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 :
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)]
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
[(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7)]
liés: stackoverflow.com/questions/21303224/...