Bonjour, je n'arrive pas à comprendre la syntaxe ce passage "nextCandidates = [ word for word in neighbours if not word in seen] " peut on la développer?
Ça s'appelle une compréhension de liste.
Tu parcours un itérable neighbours avec une boucle for for word in neighbours et tu ajoutes l'élément en question dans une nouvelle liste [word for word in neighbours] uniquement si l'élément n'est pas présent dans l'itérable seen : if not word in seen.
Ensuite tu assignes ta compréhension à une variable nextCandidates.
Exemple :
seen = ['Pierre', 'Paul', 'Henri', 'Jacques']
neighbours = ['Mathias', 'Alexandre', 'Jacques', 'Alfred', 'Titouan', 'Pierre']
nextCandidates = [person for person in neighbours if not person in seen]
# nextCandidates = [person for person in neighbours if person not in seen] # <- en général on utilise plutôt cette syntaxe qui est plus explicite
print(nextCandidates)
Affiche :
['Mathias', 'Alexandre', 'Alfred', 'Titouan']
L’efficacité de Python m'épatera toujours
Merci
J'avais le même soucis
[21:50:52] <BFM_TG>
L’efficacité de Python m'épatera toujours
Perso je trouve ça débile. C'est une solution élégante pour répondre à un problème causé par python.
Beaucoup de langages utilisent juste les fonctions .map() / .filter() pour répondre à ce problème, c'est quelque chose de standard. Sauf que ces fonctions sont pas pratiques à utiliser en python, donc on se retrouve avec les lists comprehensions qui sont cool mais différentes de ce que tous les autres font (en plus d'être plus limité).
Je comprends pas trop pourquoi python essaye d'être différent des autres langages, je vois pas ce que ça apporte.
Le 15 décembre 2020 à 08:27:57 lokilok a écrit :
[21:50:52] <BFM_TG>
L’efficacité de Python m'épatera toujoursPerso je trouve ça débile. C'est une solution élégante pour répondre à un problème causé par python.
Beaucoup de langages utilisent juste les fonctions .map() / .filter() pour répondre à ce problème, c'est quelque chose de standard. Sauf que ces fonctions sont pas pratiques à utiliser en python, donc on se retrouve avec les lists comprehensions qui sont cool mais différentes de ce que tous les autres font (en plus d'être plus limité).
Je comprends pas trop pourquoi python essaye d'être différent des autres langages, je vois pas ce que ça apporte.
Ouais c'est étonnant on dirait que Python veut être meilleur que tout le monde.
Perso je débute et je trouve ça déroutant, je me sent stupide quand je comprends pas certaines syntaxes
map et filter existent également en Python mais les compréhensions (de liste, de dictionnaire, de set, ou les expressions génératrices) permettent de raccourcir un code à une ligne et ainsi de le rendre plus facilement lisible.
C'est ce que j'ai dit dans mon message. Map et filter sont pas pratique à utiliser en python, donc plutôt que de les rendre facile à utiliser ils ont créé une nouvelle fonctionnalité qui est moins puissante.
Et je comprends pas ce choix, ça complexifie le langage plus qu'autre chose.
Le 15 décembre 2020 à 12:01:59 lokilok a écrit :
C'est ce que j'ai dit dans mon message. Map et filter sont pas pratique à utiliser en python, donc plutôt que de les rendre facile à utiliser ils ont créé une nouvelle fonctionnalité qui est moins puissante.Et je comprends pas ce choix, ça complexifie le langage plus qu'autre chose.
map et filter sont très simples à utiliser en python
Et au contraire, permettre différents styles de programmation c'est selon moi une force de Python.
La philosophie de python c'est "une seule bonne façon de faire les choses" (ou un truc du genre).
Map et filter c'est pas pratique à utiliser parce que c'est pas des fonctions membres et parce que les lambdas en python c'est chiant à écrire.
Si c'était si facile que tu le dis à utiliser ça serait plus utilisé.
map et filter sont des mots clés, pas besoin d'importer un module ou quoi que ce soit.
Et pour les lambdas et autres, c'est une question d'habitude j'imagine.
Les "list comprehensions" n'ont rien de mystique ou de spécifique à Python, elles reflètent juste la notation mathématique ensembliste { x ∊ S | P(x) }. Beaucoup d'utilisateurs de Python (qui sont pas forcément une formation d'informaticien) n'ont jamais entendu parler de "map" et "filter" mais connaissent très bien cette notation (qui se rencontre dès la L1, probablement au lycée aussi). Pour beaucoup de gens cette notation est bien plus intuitive et facile à lire que map/filter. On la retrouve aussi en Haskell par exemple, et honnêtement je trouve étonnant que ce soit pas plus répandu dans les langages de programmation.
[13:26:28] <Azerban>
mapetfiltersont des mots clés, pas besoin d'importer un module ou quoi que ce soit.
Je parle pas d'import, je parle du fait que ça s'utilise comme fonction libre et non comme fonction membres
Il y a pas de discussion pour moi, ça c'est moche et chiant à écrire :
map(filter(myList, lambda x: x % 2), lambda x: x * 2)Ça c'est bien (kotlin):
myList.filter{ it % 2 }.map{ it * 2 }
Choucador, c'est pas plus répandu simplement parce que ça apporte rien. Map / filter fait déjà très bien le taff et c'est plus puissant. Ça sert à rien d'ajouter des fonctionnalités qui font la même chose que d'autres en moins bien.
Mais t'as raison sur le fait que ça parle sans doute plus aux personnes ayant un bagage scientifique. Mais bon pour les autres ça complique juste les choses.
Fondamentalement, c'est la notation set-builder: https://en.wikipedia.org/wiki/Set-builder_notation
On voyait ca au lycee quand j'y etais.
En l'occurence python etend la notation aux listes en plus des ensembles, mais c'est fondamentalement pareil.
Perso, je prefere lire les notations set builder aux pipelines qui sont generalement imbittable.
[17:05:53] <godrik>
Perso, je prefere lire les notations set builder aux pipelines qui sont generalement imbittable.
Les deux sont tout autant imbittables je trouve à partir du moment où les expressions sont pas triviales ![]()
Perso en soit je trouve les deux autant lisible (enfin quand c'est bien fait, map / filter en python c'est moche, en C++ c'est pas top non plus), c'est juste que map / filter c'est plus commun dans le monde de la programmation, donc ça me semble plus logique d'utiliser ça. Histoire d'avoir un standard que tout le monde connait.