d[l.pop()]=l.pop() Quel l.pop() est effectué en premier? celui de gauche ou de droite?
Suffit de tester.
a = ['premier','second'] d = {} d[a.pop()] = a.pop() d {'premier': 'second'}
Ce qui en soit semble logique.
Maitenant je doute de la bonne idee de ce mecanisme...
Franchement, je prefere encore ma version ! Au moins, il y a un comportement
previsible ( il me semble que zip certifie que les iterateurs seront utilises sequentiellement ) alors que dans ce cas, rien ne le garantit.
tiissa
Christophe wrote:
En voici une methode beaucoup plus facile à ecrire :)
i = iter(liste) for elem in zip(i,i): print elem
Plus facile mais sans garantie. zip ne spécifie pas dans quel ordre il accède aux listes et à leurs éléments mais ta boucle repose dessus. Par exemple rien n'empêcherait zip de dévider toute la première liste avant de s'attaquer aux suivantes (rien, sauf la simplicité de l'implémentation).
Personnellement, je déconseillerais cette méthode, au profit de l'itérateur de Laurent ou de la solution de Jean-Sébastien.
Pour ne pas être le seul à ne rien proposer, voilà une solution avec groupby :
liste = ['a', 1, 'b', 2, 'c', 3] from itertools import groupby for _, (k, v) in groupby(enumerate(liste), lambda (i, x) : i/2): ... print k[1], '=>', v[1]
... a => 1 b => 2 c => 3
Christophe wrote:
En voici une methode beaucoup plus facile à ecrire :)
i = iter(liste)
for elem in zip(i,i): print elem
Plus facile mais sans garantie. zip ne spécifie pas dans quel ordre il
accède aux listes et à leurs éléments mais ta boucle repose dessus.
Par exemple rien n'empêcherait zip de dévider toute la première liste
avant de s'attaquer aux suivantes (rien, sauf la simplicité de
l'implémentation).
Personnellement, je déconseillerais cette méthode, au profit de
l'itérateur de Laurent ou de la solution de Jean-Sébastien.
Pour ne pas être le seul à ne rien proposer, voilà une solution avec
groupby :
liste = ['a', 1, 'b', 2, 'c', 3]
from itertools import groupby
for _, (k, v) in groupby(enumerate(liste), lambda (i, x) : i/2):
... print k[1], '=>', v[1]
En voici une methode beaucoup plus facile à ecrire :)
i = iter(liste) for elem in zip(i,i): print elem
Plus facile mais sans garantie. zip ne spécifie pas dans quel ordre il accède aux listes et à leurs éléments mais ta boucle repose dessus. Par exemple rien n'empêcherait zip de dévider toute la première liste avant de s'attaquer aux suivantes (rien, sauf la simplicité de l'implémentation).
Personnellement, je déconseillerais cette méthode, au profit de l'itérateur de Laurent ou de la solution de Jean-Sébastien.
Pour ne pas être le seul à ne rien proposer, voilà une solution avec groupby :
liste = ['a', 1, 'b', 2, 'c', 3] from itertools import groupby for _, (k, v) in groupby(enumerate(liste), lambda (i, x) : i/2): ... print k[1], '=>', v[1]