OVH Cloud OVH Cloud

Accès à une liste triée de doublet

37 réponses
Avatar
Dominique Crétel
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

10 réponses

1 2 3 4
Avatar
Jean-Sebastien Mouret
Dominique Crétel writes:

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 ?



for k, v in zip(lite[::2], lite[1::2]):
print k, "=>", v

je ne sais pas si c'est optimal, mais c'est concis :)

--
js

Avatar
NicolasP
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


Et pourquoi pas ceci ?

def do_some_work(k, v):
print k, " => ", v

for i in xrange(len(liste), 2):
do_some_work(liste[i], liste[i+1])

Nicolas

Avatar
Dominique Crétel
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


Et pourquoi pas ceci ?

def do_some_work(k, v):
print k, " => ", v

for i in xrange(len(liste), 2):
do_some_work(liste[i], liste[i+1])

Nicolas


Chez moi, mon script fonctionne, mais le tien, bien que très
intéressant, ne fonctionne pas ?!

Je n'obtiens rien !!!


Avatar
Dominique Crétel
Dominique Crétel writes:

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 ?



for k, v in zip(lite[::2], lite[1::2]):
print k, "=>", v

je ne sais pas si c'est optimal, mais c'est concis :)



Merci
En effet ça marche !
C'est quoi cette commande zip ?
Et je ne connais pas la syntaxe des slices avec 2 ':' ???
(je ne connais que celle avec 1 ':')


Avatar
Jean-Sebastien Mouret
NicolasP writes:

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


Et pourquoi pas ceci ?

def do_some_work(k, v):
print k, " => ", v

for i in xrange(len(liste), 2):
do_some_work(liste[i], liste[i+1])


for i in xrange(0, len(liste), 2):
...

:)

--
js


Avatar
R12y
Dominique Crétel :

Chez moi, mon script fonctionne, mais le tien, bien que très
intéressant, ne fonctionne pas ?!


tu peux aussi
faire un

liste.reverse()
# une boucle for
cle=liste.pop()
valeur=liste.pop()
dict[cle]=valeur

--

http://www.onirik.net/article.php3?id_article7
http://www.maemo.org/platform/docs/howtos/howto_new_application.html
http://www.linuxdevices.com/files/article057/index.html

Avatar
Dominique Crétel
Dominique Crétel wrote:
for k, v in zip(lite[::2], lite[1::2]):
print k, "=>", v

je ne sais pas si c'est optimal, mais c'est concis :)



C'est beau, mais je fais partit des gens qui n'aime pas quand la
concision donne quelque chose de non lisible :)

C'est quoi cette commande zip ?

print zip.__doc__
zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]




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.

enclair zip((1,2,3),(4,5,6)) --> ((1,4),(2,5),(3,6))

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



Merci Guillaume pour ces précisions.
Le néophyte que je suis en sait un peu plus aujourd'hui !




Avatar
Dominique Crétel
Dominique Crétel :

Chez moi, mon script fonctionne, mais le tien, bien que très
intéressant, ne fonctionne pas ?!


tu peux aussi
faire un

liste.reverse()
# une boucle for
cle=liste.pop()
valeur=liste.pop()
dict[cle]=valeur



Excuses-moi mais là ne ne comprends pas !
Peux-tu me donner un exemple ?


Avatar
R12y
Dominique Crétel :

Excuses-moi mais là ne ne comprends pas !
Peux-tu me donner un exemple ?


d={}
l = ['222', 'bbb', '111', 'aaa', '333', 'ccc', '21456', 'fdfd']
l.reverse()
for i in range(len(l)/2):
cle=l.pop()
valeur=l.pop()
d[cle]=valeur

--

http://www.onirik.net/article.php3?id_article7
http://www.maemo.org/platform/docs/howtos/howto_new_application.html
http://www.linuxdevices.com/files/article057/index.html

Avatar
R12y
R12y :

Dominique Crétel :

Excuses-moi mais là ne ne comprends pas !
Peux-tu me donner un exemple ?


d={}
l = ['222', 'bbb', '111', 'aaa', '333', 'ccc', '21456', 'fdfd']
l.reverse()
for i in range(len(l)/2):
cle=l.pop()
valeur=l.pop()
d[cle]=valeur


D'ailleurs j'ai une question à ceux qui connaissent comment ça marche:
quel est l'ordre dans lequel les choses sont faites si je fais:

[...]
for i in range(len(l)/2):
d[l.pop()]=l.pop()
[...]

Quel l.pop() est effectué en premier? celui de gauche ou de droite?

--

http://www.onirik.net/article.php3?id_article7
http://www.maemo.org/platform/docs/howtos/howto_new_application.html
http://www.linuxdevices.com/files/article057/index.html


1 2 3 4