CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

problème de syntaxe python

Tourang
Tourang
Niveau 10
14 décembre 2020 à 15:02:13

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?

Azerban
Azerban
Niveau 16
14 décembre 2020 à 15:56:14

Ç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']
Pseudo supprimé
Pseudo supprimé 14 décembre 2020 à 21:50:52

L’efficacité de Python m'épatera toujours

DocBrindzing37
DocBrindzing37
Niveau 10
14 décembre 2020 à 22:29:30

Merci

DocBrindzing37
DocBrindzing37
Niveau 10
14 décembre 2020 à 22:30:03

J'avais le même soucis

lokilok
lokilok
Niveau 16
15 décembre 2020 à 08:27:57

[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.

Message édité le 15 décembre 2020 à 08:29:01 par lokilok
Pseudo supprimé
Pseudo supprimé 15 décembre 2020 à 11:12:11

Le 15 décembre 2020 à 08:27:57 lokilok a écrit :

[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.

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

Azerban
Azerban
Niveau 16
15 décembre 2020 à 11:53:48

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.

lokilok
lokilok
Niveau 16
15 décembre 2020 à 12:01:59

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.

Message édité le 15 décembre 2020 à 12:03:45 par lokilok
Azerban
Azerban
Niveau 16
15 décembre 2020 à 12:30:38

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.

lokilok
lokilok
Niveau 16
15 décembre 2020 à 13:17:27

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é.

Azerban
Azerban
Niveau 16
15 décembre 2020 à 13:26:28

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.

Choucador
Choucador
Niveau 10
15 décembre 2020 à 13:50:33

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.

Message édité le 15 décembre 2020 à 13:52:11 par Choucador
lokilok
lokilok
Niveau 16
15 décembre 2020 à 14:12:51

[13:26:28] <Azerban>
map et filter sont 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 }
Message édité le 15 décembre 2020 à 14:13:19 par lokilok
lokilok
lokilok
Niveau 16
15 décembre 2020 à 14:15:55

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.

Message édité le 15 décembre 2020 à 14:20:16 par lokilok
godrik
godrik
Niveau 30
15 décembre 2020 à 17:05:53

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.

lokilok
lokilok
Niveau 16
15 décembre 2020 à 18:35:08

[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 :hap:

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.

Message édité le 15 décembre 2020 à 18:37:03 par lokilok
Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment