La manipulation de structures de données est fantastique dans ce langage.
J’avais un problème du genre :
“soit des personnes dans une file ayant un rang supposé…””
persons = [ ('Nadine', 3), ('Tom', 2), ('Christophe', 7), ('Cloclo', 1), ('Lily', 5), ('Georges', 7), ('Paul', 6), ('Bérénice', 4), ('Ursula', 10), ('Lea', 15) ] |
“…trouver, parmi les 5 premières, celles qui sont effectivement à leur place”
Vous connaissez mon amour immodéré pour les listes en intention en Python :
>>> [name for i, (name, rank) in enumerate(persons[:5]) if (i + 1) == rank] [u'Tom', u'Lily'] |
Snif. j’en pleurerais presque.
C’est trop beau !
+1. Tellement élégant.
Mon slip vient d’en prendre un coup. C’est du bonbon pour les yeux.
Arf, je viens de m’appercevoir qu’on peut faire mieux :
Dans ce cas j’aurais laissé le keyword “start=” devant le 1 pour plus de clarté (même si c’est plus long, du coup). Bon, je retourne enculer mes mouches…
Au fait, y’a pas d’image pour cet article ?
Quand je vois que tu encules les mouches un peu plus après avoir trouvé une solution déjà très élégante, je comprends mieux l’opposition de style entre toi et Max.
Sinon j’ai lu ça et les deux articles sur les listes en intentions, et j’ai appris plein de trucs. Ca m’a relancé sur les yield et tout aussi.
Donc merci.
@policier moustachu : ^^
@kontre : bien vu.
C’est tellement sexe les listes en intention (en compréhension en bon français matheux), mais tellement pas adapté à PEP8 dès que ça devient un peu bourrin…
Tu peux la mettre sur plusieurs lignes sans problème (si c’est bien de ça que tu aprlers pour le PEP8) :
@kontre: oui, tu peux le découper. Mais là, c’est plutôt court. Quand t’a pas mal de traitement, des if à la fois dans le map et le filter, tu te retrouve vite avec des lignes coupées illisibles.
(@sam, @max : vous pourriez pas viter l’email obligatoire pour commenter ?)
Il faudrait installer un plugin de plus, et honetement, j’ai pas la foi. Si max veut le faire, j’y vois pas d’inconvénient.
Quand à la liste en intention sur plusieurs lignes : si votre expression déborde, c’est qu’il faut en faire une boucle ordinaire. Les listes en intentions ne sont pas là pour créer du code illisible.
@gontran,
askimet s’en sert pour bannir les spammeurs non ?