c'est assez bizarre comme méthode, mais elle fonctionne.
Maintenant c'est à toi de m'expliquer en quoi c'est "bizare" :-)
je comprends cette méthode mais je trouve ça bizarre (ou plutot non intuitif) dans le sens où il faut :
- inverser la liste - ne parcourir la moitié de la liste dans le for - accéder au reste de la liste au moyen de pop()
mais le tout est logique !
R12y
Dominique Crétel :
je comprends cette méthode mais je trouve ça bizarre (ou plutot non intuitif) dans le sens où il faut : - inverser la liste
ça c'est parceque pop() prend par la fin. si pop prenait du début, ça n'aurait pas été necessaire.
- ne parcourir la moitié de la liste dans le for
Parceque tu prends les éléments deux par deux.
- accéder au reste de la liste au moyen de pop()
Ce n'est pas un "simple" accès, puisque en même temps, tu "vide" la liste. Si la liste est énorme, peut-être que au fur et à mesure du traitement tu réduit la taille occupée par cette liste.
je comprends cette méthode mais je trouve ça bizarre (ou plutot non
intuitif) dans le sens où il faut :
- inverser la liste
ça c'est parceque pop() prend par la fin.
si pop prenait du début, ça n'aurait pas été necessaire.
- ne parcourir la moitié de la liste dans le for
Parceque tu prends les éléments deux par deux.
- accéder au reste de la liste au moyen de pop()
Ce n'est pas un "simple" accès, puisque en même temps, tu "vide" la liste.
Si la liste est énorme, peut-être que au fur et à mesure du traitement tu
réduit la taille occupée par cette liste.
je comprends cette méthode mais je trouve ça bizarre (ou plutot non intuitif) dans le sens où il faut : - inverser la liste
ça c'est parceque pop() prend par la fin. si pop prenait du début, ça n'aurait pas été necessaire.
- ne parcourir la moitié de la liste dans le for
Parceque tu prends les éléments deux par deux.
- accéder au reste de la liste au moyen de pop()
Ce n'est pas un "simple" accès, puisque en même temps, tu "vide" la liste. Si la liste est énorme, peut-être que au fur et à mesure du traitement tu réduit la taille occupée par cette liste.
Return a list of tuples, where each tuple contains the i-th element from each of the argument sequences. The returned list is truncated in length to the length of the shortest argument sequence.
Return a list of tuples, where each tuple contains the i-th element
from each of the argument sequences. The returned list is truncated
in length to the length of the shortest argument sequence.
Return a list of tuples, where each tuple contains the i-th element from each of the argument sequences. The returned list is truncated in length to the length of the shortest argument sequence.
Et je ne connais pas la syntaxe des slices avec 2 ':' ??? (je ne connais que celle avec 1 ':')
[bornedebut:bornefin:increment]
Touts les elements de l'index debut à l'index fin (non compris) en passant par (la loraine ?) ceux du milieu tous les increment
(1,2,3,4,5,6,7,8,9)[::2] -->1,3,5,7,9
-- Guillaume.
R12y
R12y :
Dominique Crétel :
je comprends cette méthode mais je trouve ça bizarre (ou plutot non intuitif) dans le sens où il faut : - inverser la liste ça c'est parceque pop() prend par la fin.
si pop prenait du début, ça n'aurait pas été necessaire.
En faisant pop(0) tu peux enlever l'inversion car tu lui dit de prendre le premier élément de la liste. J'avais pas trouvé/lu la doc avant maintenant.
je comprends cette méthode mais je trouve ça bizarre (ou plutot non
intuitif) dans le sens où il faut :
- inverser la liste
ça c'est parceque pop() prend par la fin.
si pop prenait du début, ça n'aurait pas été necessaire.
En faisant pop(0) tu peux enlever l'inversion car tu lui dit de prendre le
premier élément de la liste. J'avais pas trouvé/lu la doc avant maintenant.
je comprends cette méthode mais je trouve ça bizarre (ou plutot non intuitif) dans le sens où il faut : - inverser la liste ça c'est parceque pop() prend par la fin.
si pop prenait du début, ça n'aurait pas été necessaire.
En faisant pop(0) tu peux enlever l'inversion car tu lui dit de prendre le premier élément de la liste. J'avais pas trouvé/lu la doc avant maintenant.
je comprends cette méthode mais je trouve ça bizarre (ou plutot non intuitif)
Et inutilement compliqué !-)
dans le sens où il faut : - inverser la liste
ça c'est parceque pop() prend par la fin.
help([].pop) Help on built-in function pop:
pop(...) L.pop([index]) -> item -- remove and return item at index (default last)
l = ['a', 0, 'b', 1, 'c', 2] l ['a', 0, 'b', 1, 'c', 2]
l.pop(0) 'a'
l [0, 'b', 1, 'c', 2]
si pop prenait du début, ça n'aurait pas été necessaire.
Ce n'est donc pas nécessaire !-)
- ne parcourir la moitié de la liste dans le for
Parceque tu prends les éléments deux par deux.
- accéder au reste de la liste au moyen de pop()
Ce n'est pas un "simple" accès, puisque en même temps, tu "vide" la liste.
Puique list.pop() vide la liste, un while suffit...
while liste: print "%s : %s" % (liste.pop(0), liste.pop(0))
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
bruno at modulix
Dominique Crétel wrote:
Bonjour,
Je débute en Python. J'ai la liste _triée_ complexe suivante :
lite = ['222', 'bbb', '111', 'aaa', '333', 'ccc', '21456', 'fdfd'] etc.
cela aurait pu être un dictionnaire, mais l'ordre ci-dessus est important.
cf mon autre réponse sur le choix de la structure de données.
le nombre d'éléments est bien pair.
il existe un lien entre le 1er élément et le 2ème, le 3ème et le 4ème, etc...
comment facilement au moyen d'un for balayer la liste ?
Au moyen d'un while, ça te va ?-)
j'ai trouvé cela, mais est-ce bien pythonien ?
Non.
----- def do_some_work(k, v): print k, " => ", v
i = 0 for x in liste: if (i %% 2 == 0): k = x else: v = x do_some_work(k, v) i = i + 1 -----
# assert len(liste) % 2 == 0, "oops, liste is not pair" while liste: do_some_work(liste.pop(0), liste.pop(0))
NB : Si tu a besoin de la liste pour d'autres traitements, il faut en faire une copie. Ce qui n'est pas forcément optimal si ta liste est longue. D'où l'intérêt de favoriser une bonne structure de données si possible (cf post précédent)
Merci
HTH
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
Dominique Crétel wrote:
Bonjour,
Je débute en Python.
J'ai la liste _triée_ complexe suivante :
lite = ['222', 'bbb', '111', 'aaa', '333', 'ccc', '21456', 'fdfd']
etc.
cela aurait pu être un dictionnaire, mais l'ordre ci-dessus est important.
cf mon autre réponse sur le choix de la structure de données.
le nombre d'éléments est bien pair.
il existe un lien entre le 1er élément et le 2ème, le 3ème et le 4ème,
etc...
comment facilement au moyen d'un for balayer la liste ?
Au moyen d'un while, ça te va ?-)
j'ai trouvé cela, mais est-ce bien pythonien ?
Non.
-----
def do_some_work(k, v):
print k, " => ", v
i = 0
for x in liste:
if (i %% 2 == 0):
k = x
else:
v = x
do_some_work(k, v)
i = i + 1
-----
# assert len(liste) % 2 == 0, "oops, liste is not pair"
while liste:
do_some_work(liste.pop(0), liste.pop(0))
NB : Si tu a besoin de la liste pour d'autres traitements, il faut en
faire une copie. Ce qui n'est pas forcément optimal si ta liste est
longue. D'où l'intérêt de favoriser une bonne structure de données si
possible (cf post précédent)
Merci
HTH
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb@xiludom.gro'.split('@')])"
Je débute en Python. J'ai la liste _triée_ complexe suivante :
lite = ['222', 'bbb', '111', 'aaa', '333', 'ccc', '21456', 'fdfd'] etc.
cela aurait pu être un dictionnaire, mais l'ordre ci-dessus est important.
cf mon autre réponse sur le choix de la structure de données.
le nombre d'éléments est bien pair.
il existe un lien entre le 1er élément et le 2ème, le 3ème et le 4ème, etc...
comment facilement au moyen d'un for balayer la liste ?
Au moyen d'un while, ça te va ?-)
j'ai trouvé cela, mais est-ce bien pythonien ?
Non.
----- def do_some_work(k, v): print k, " => ", v
i = 0 for x in liste: if (i %% 2 == 0): k = x else: v = x do_some_work(k, v) i = i + 1 -----
# assert len(liste) % 2 == 0, "oops, liste is not pair" while liste: do_some_work(liste.pop(0), liste.pop(0))
NB : Si tu a besoin de la liste pour d'autres traitements, il faut en faire une copie. Ce qui n'est pas forcément optimal si ta liste est longue. D'où l'intérêt de favoriser une bonne structure de données si possible (cf post précédent)
Merci
HTH
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
Laurent Pointal
Bonjour,
Je débute en Python. J'ai la liste _triée_ complexe suivante :
lite = ['222', 'bbb', '111', 'aaa', '333', 'ccc', '21456', 'fdfd'] etc.
cela aurait pu être un dictionnaire, mais l'ordre ci-dessus est important.
le nombre d'éléments est bien pair.
il existe un lien entre le 1er élément et le 2ème, le 3ème et le 4ème, etc...
comment facilement au moyen d'un for balayer la liste ?
j'ai trouvé cela, mais est-ce bien pythonien ?
----- def do_some_work(k, v): print k, " => ", v
i = 0 for x in liste: if (i %% 2 == 0): k = x else: v = x do_some_work(k, v) i = i + 1 -----
Merci
Avec un générateur, comme ça:
def coupleur(l) : iter_l = iter(l) while True : k = iter_l.next() v = iter_l.next() yield (k,v)
Ensuite:
lite = ['222', 'bbb', '111', 'aaa', '333', 'ccc', '21456', 'fdfd'] cpl = coupleur(lite) for k,v in cpl: do_some_work(k,v)
Bonjour,
Je débute en Python.
J'ai la liste _triée_ complexe suivante :
lite = ['222', 'bbb', '111', 'aaa', '333', 'ccc', '21456', 'fdfd']
etc.
cela aurait pu être un dictionnaire, mais l'ordre ci-dessus est important.
le nombre d'éléments est bien pair.
il existe un lien entre le 1er élément et le 2ème, le 3ème et le 4ème,
etc...
comment facilement au moyen d'un for balayer la liste ?
j'ai trouvé cela, mais est-ce bien pythonien ?
-----
def do_some_work(k, v):
print k, " => ", v
i = 0
for x in liste:
if (i %% 2 == 0):
k = x
else:
v = x
do_some_work(k, v)
i = i + 1
-----
Merci
Avec un générateur, comme ça:
def coupleur(l) :
iter_l = iter(l)
while True :
k = iter_l.next()
v = iter_l.next()
yield (k,v)
Ensuite:
lite = ['222', 'bbb', '111', 'aaa', '333', 'ccc', '21456', 'fdfd']
cpl = coupleur(lite)
for k,v in cpl: do_some_work(k,v)