IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Liste en compréhension


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 26
    Par défaut Liste en compréhension
    Bonjour,

    Je me heurt à un problème (de syntaxe), je souhaite écrire une liste en compréhension qui mais une liste de nombres paires de 2 à 20 et calculer le produit de deux entier consécutifs:

    J'ai réussi à faire ma liste d'entiers paires:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbr = [x for x in range(2, 21) if x % 2 == 0]
    En revanche le produit de deux entiers consécutifs .... ( dans la même ligne)

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 753
    Par défaut
    Salut,

    Citation Envoyé par BamBi25 Voir le message
    En revanche le produit de deux entiers consécutifs .... ( dans la même ligne)
    Et si vous commenciez par le faire avec une boucle "for" normale?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 26
    Par défaut
    Avec plusieurs boucle cela ne pose pas de problème, je cherche une écriture "élégante".

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Bonjour,

    Avec plusieurs boucle cela ne pose pas de problème, je cherche une écriture "élégante".
    Avec plusieurs boucles, ah... je veux bien voir votre solution alors.

    Ça permettra de vous aider aussi à trouver la solution version liste compréhension.
    C'est en général d'une boucle "standard" qu'on part pour rechercher la liste compréhension par la suite.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 26
    Par défaut re
    Alors voilà le code "complet" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    nbr = [x for x in range(2, 21) if x % 2 == 0]
    print(nbr)
    i, o, s = 0, 0, 0
    for a in nbr:
        if i == 1:
            s = nbr[o] * nbr[o-1]
            print(s)
            s = 0
            i = 0
        i += 1
        o += 1

  6. #6
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 064
    Par défaut
    Ok, donc déjà il n'y a qu'une boucle...
    Ensuite, on remarque l'obligation de travailler avec les indices, et je propose de transformer ce travail en utilisant enumerate, qui est un intermédiaire pour arriver aux compréhensions.

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 753
    Par défaut
    Salut,

    Déjà vous avez un problème de définition. Si vous dites:
    Citation Envoyé par BamBi25 Voir le message
    une liste de nombres paires de 2 à 20 et calculer le produit de deux entier consécutifs
    Si n est un entier, l'entier consécutif sera n+1.
    Ce qui est différent de 2 éléments consécutifs d'une liste.

    Et si je dois faire le produit de deux éléments consécutifs d'une liste L (de longueur >=2), il va falloir faire une boucle sur l'index de tous les éléments de 0 à len(L) - 1 et multiplier L[i] avec L[i+1].
    Ce qui en Python s'écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(len(L)-1):
         print (L[i]*L[i+1])
    ou bien, en compréhension, [ L[i]*L[i+1] for i in range(len(L)-1) ].

    Ceci dit, est ce que on peut "simplifier" lorsque L est particulière comme "les 10 premiers nombres pairs"? Par construction, si n est un nombre pair, le suivant sera n+2. Donc on peut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for n in range(2, 19, 2):
         print (n*(n+2))
    ou bien, en compréhension, [n*(n+2) for n in range(2, 19, 2) ].

    Dans tous les cas, "compréhension" suppose un code déjà "compact" et pour çà, il faut un peu avoir appris à programmer pour savoir simplifier son code et utiliser au mieux les fonctionnalités du langage.



    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Liste de compréhension avec set()
    Par Naunau75 dans le forum Général Python
    Réponses: 3
    Dernier message: 21/06/2018, 13h38
  2. Réponses: 3
    Dernier message: 02/02/2012, 15h55
  3. Liste dynamique compréhension
    Par speedy_g dans le forum Excel
    Réponses: 3
    Dernier message: 01/12/2011, 10h35
  4. compréhension de liste paire par paire
    Par sopsag dans le forum Général Python
    Réponses: 13
    Dernier message: 07/12/2010, 21h36
  5. Syntaxe élégante pour une fusion de compréhension de liste
    Par sopsag dans le forum Général Python
    Réponses: 8
    Dernier message: 23/08/2010, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo