• # Explications

    Posté par . En réponse au message Supprimer l'élément en cours d'une liste. Évalué à 6.

    On ne modifie pas une liste sur laquelle on est en train d'itérer, sinon tout par en couilles. C'est pour ça que tu obtiens ce résultat. Quand tu va "poper" testa, testaa va se retrouver à sa place et à la prochaine itération, il va passer après. L'élément testaa sera donc passé "à travers" les mailles du filet.

    En passant, tu peux utiliser maliste.remove(el) à la place de ton pop+index.

    Ensuite, tu ne veux pas passer par une liste "temporaire", mais c'est exactement ce que va te faire le premier exemple en utilisant la compréhension de liste : il va créer une nouvelle liste, l'affecter à maliste, et l'ancienne va se faire garbage-collecter car elle n'est plus référencée. Pourtant, c'est très lisible (d'ailleurs, pourquoi ne choisis-tu pas cette solution ?).

    En tous cas, ta manière de penser me fait dire que t'es un habitué du C ou d'un autre langage "bas niveau", et j'ai l'impression que tu essayes de faire la même chose en python : ce n'est pas, selon moi, la bonne approche. Utilise plutôt les manières de faire du langage. Certes, tu ne seras peut-être pas aussi rapide que du C, mais si c'est la rapidité qui t'importe, pourquoi as-tu choisi python ?

    Enfin, pour te montrer qu'on peut aussi faire complètement différent, en fonctionnel :
    filter(lambda x: not 'a' in x, maliste)
    Même si il me semble que Guido a déprécié l'utilisation de map/filter en faveur de la syntaxe "list comprehension".