Bonsoir,
Lorsque l'on boucle sur une liste, il est parfois nécessaire, utile, et
agréable d'accéder à l'élément n-1 si l'élément courant est n.
J'ai toujours tenu pour acquis que la seule méthode pour avoir l'index
de l'élément courant (et donc de pouvoir calculer celui de n'importe
quel autre élément) est un range(len(liste)), comme dans la boucle 2 du
programme ci-après.
Mais si quelqu'un a mieux à proposer, genre un mot magique donnant
l'index en cours dans une boucle, je suis preneur.
A+
jm
liste= ['a','x','b','z']
for l in liste:
print 'boucle 1: l=',l,' l-1 est inconnu'
for l in range(len(liste)):
print 'boucle 2: l=',liste[l],' l-1=',liste[l-1]
Attention avec les solutions que vous avez eu. Elles peuvent en effet avoir une très mauvaise complexité algorithmique. L'accès au ième élément est une opération complexe !
L'accès au ieme élément d'une liste ou d'un tuple en Python est garatit en temps constant.
Attention avec les solutions que vous avez eu. Elles peuvent en effet
avoir une très mauvaise complexité algorithmique. L'accès au ième
élément est une opération complexe !
L'accès au ieme élément d'une liste ou d'un tuple en Python est garatit
en temps constant.
Attention avec les solutions que vous avez eu. Elles peuvent en effet avoir une très mauvaise complexité algorithmique. L'accès au ième élément est une opération complexe !
L'accès au ieme élément d'une liste ou d'un tuple en Python est garatit en temps constant.
Yermat
Christophe wrote:
Attention avec les solutions que vous avez eu. Elles peuvent en effet avoir une très mauvaise complexité algorithmique. L'accès au ième élément est une opération complexe !
L'accès au ieme élément d'une liste ou d'un tuple en Python est garatit en temps constant.
Pour les listes python peut-être... J'ai pas trouvé de référence sur la complexité algorithmique de l'implémentation (à part http://www.norvig.com/python-lisp.html).
L'avantage de ma solution est qu'elle fonctionne aussi pour n'importe quel itérateur/générateur !
Et n'oublions pas non plus que le programmeur peu aussi hériter de UserList...
-- Yermat
Christophe wrote:
Attention avec les solutions que vous avez eu. Elles peuvent en effet
avoir une très mauvaise complexité algorithmique. L'accès au ième
élément est une opération complexe !
L'accès au ieme élément d'une liste ou d'un tuple en Python est garatit
en temps constant.
Pour les listes python peut-être...
J'ai pas trouvé de référence sur la complexité algorithmique de
l'implémentation (à part http://www.norvig.com/python-lisp.html).
L'avantage de ma solution est qu'elle fonctionne aussi pour n'importe
quel itérateur/générateur !
Et n'oublions pas non plus que le programmeur peu aussi hériter de
UserList...
Attention avec les solutions que vous avez eu. Elles peuvent en effet avoir une très mauvaise complexité algorithmique. L'accès au ième élément est une opération complexe !
L'accès au ieme élément d'une liste ou d'un tuple en Python est garatit en temps constant.
Pour les listes python peut-être... J'ai pas trouvé de référence sur la complexité algorithmique de l'implémentation (à part http://www.norvig.com/python-lisp.html).
L'avantage de ma solution est qu'elle fonctionne aussi pour n'importe quel itérateur/générateur !
Et n'oublions pas non plus que le programmeur peu aussi hériter de UserList...
-- Yermat
Do Re Mi chel La Si Do
Tu a pris des cours ?
Peut-être m'entraîne-je, avant de me mettre à Perl ?
;o)
Michel Claveau
Tu a pris des cours ?
Peut-être m'entraîne-je, avant de me mettre à Perl ?
Peut-être m'entraîne-je, avant de me mettre à Perl ?
;o)
Michel Claveau
Amaury
Christophe wrote:
L'accès au ieme élément d'une liste ou d'un tuple en Python est garatit en temps constant.
Pour les listes python peut-être... J'ai pas trouvé de référence sur la complexité algorithmique de l'implémentation (à part http://www.norvig.com/python-lisp.html).
Si, les listes et les tuples sont implémentés comme des tableaux de pointeurs. C'est vrai au moins pour CPython et Jython.
L'avantage de ma solution est qu'elle fonctionne aussi pour n'importe quel itérateur/générateur !
C'est vrai, surtout que certains itérateurs ne peuvent pas être relus. (un curseur de base de données, ou readline sur une socket, par exemple)
Mais cette méthode est plus lente pour une 'vraie' liste. La complexité algorithmique est souvent à mettre en balance avec le temps de base de l'opération.
-- Amaury
Christophe wrote:
L'accès au ieme élément d'une liste ou d'un tuple en Python est
garatit en temps constant.
Pour les listes python peut-être...
J'ai pas trouvé de référence sur la complexité algorithmique de
l'implémentation (à part http://www.norvig.com/python-lisp.html).
Si, les listes et les tuples sont implémentés comme des tableaux de
pointeurs. C'est vrai au moins pour CPython et Jython.
L'avantage de ma solution est qu'elle fonctionne aussi pour n'importe
quel itérateur/générateur !
C'est vrai, surtout que certains itérateurs ne peuvent pas être relus.
(un curseur de base de données, ou readline sur une socket, par exemple)
Mais cette méthode est plus lente pour une 'vraie' liste.
La complexité algorithmique est souvent à mettre en balance avec le
temps de base de l'opération.
L'accès au ieme élément d'une liste ou d'un tuple en Python est garatit en temps constant.
Pour les listes python peut-être... J'ai pas trouvé de référence sur la complexité algorithmique de l'implémentation (à part http://www.norvig.com/python-lisp.html).
Si, les listes et les tuples sont implémentés comme des tableaux de pointeurs. C'est vrai au moins pour CPython et Jython.
L'avantage de ma solution est qu'elle fonctionne aussi pour n'importe quel itérateur/générateur !
C'est vrai, surtout que certains itérateurs ne peuvent pas être relus. (un curseur de base de données, ou readline sur une socket, par exemple)
Mais cette méthode est plus lente pour une 'vraie' liste. La complexité algorithmique est souvent à mettre en balance avec le temps de base de l'opération.