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 :

Comprehension de liste sur condtion vectorielle [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut Comprehension de liste sur condtion vectorielle
    Bonjour,

    soit les deux listes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a = [0,0,1,0,1,0]
    b = [1,2,3,4,5,6]
    Je souhaite extraire les éléments de b pour lesquels a est positif.
    Autrement dit avoir in fine la liste [3,5]

    Ceci ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c = [v for v in b if a>0]
    En rusant un peu, je me dépatouille avec ce code là qui donne bien le résultat escompté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c = [v for (n,v) in enumerate(b) if a[n]>0]
    Néanmoins, je ne suis pas sûr que ça soit très propre... Y'a-t'il plus "pythonic" comme solution ?

    Idéalement j'aimerais rester en python pur mais s'il existe une solution élégante avec un module, je suis preneur !
    Par exemple, j'avais pensé à numpy mais np.where() ne donne pas ce que je souhaite. Il me semble que np.where renverra toujours un vecteur de la même taille que ses arguments...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    np.where(np.array(a)>0, b, None)
    Merci d'avance pour vos retours éclairés

    D.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Citation Envoyé par DonutMan Voir le message
    Ceci ne marche pas : c = [v for v in b if a>0]
    Oui c'est évident. Déjà rien que pour toi, qu'est censé signifier "si une liste est supérieure à 0"??? Alors pour Python...
    Il faut bien prendre conscience qu'une expression "en intension" n'est que l'écriture simplifiée d'une boucle "for"...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    final=[]
    for x in liste:
    	if condition: final.append(x)
    ... qui se réécrira alors final=[x for x in liste if condition]. La condition, elle, ne change pas. Donc si la condition est mauvaise dès le départ, ce n'est pas en la réécrivant dans l'expression simplifiée que ça la rendra correcte.

    Citation Envoyé par DonutMan Voir le message
    Néanmoins, je ne suis pas sûr que ça soit très propre... Y'a-t'il plus "pythonic" comme solution ?
    Déjà question propreté il sera bon de se demander si la liste se justifie pour un truc qui n'évolue pas (pour ça il y a le tuple).
    Ensuite puisque ton code présuppose "a" et "b" de même taille, alors il y a le zip... c=tuple(y for (x, y) in zip(a, b) if x > 0)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    avec numpy on peut faire un truc dans ce goût là, sans dire que c'est mieux/plus pythonic :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a = np.array([0,0,1,0,1,0], dtype='bool')
    b = np.array([1,2,3,4,5,6])
    b[a]

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    sans dire que c'est mieux/plus pythonic
    Je sais pas si c'est plus/moins pythonic mais en tout cas terminer par un simple b[a] c'est classe !!!
    Faut vraiment que je me mette à numpy moi...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut
    Bonjour,
    merci à vous pour vos retours rapides
    J'ai modifié mon code en conséquence

    A bientôt,

    D.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Faut vraiment que je me mette à numpy moi...
    J'utilise très superficiellement numpy avec cv2, qui sont les fous qui ont créé ce truc imbitable et inutilisable avec des boucles et des conditions ???

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    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 762
    Par défaut
    Citation Envoyé par LeNarvalo Voir le message
    J'utilise très superficiellement numpy avec cv2, qui sont les fous qui ont créé ce truc imbitable et inutilisable avec des boucles et des conditions ???
    numpy et cv2 sont des bibliothèques spécialisées et optimisées (écrites en C).

    On peut faire ce genre de choses sur des domaines "stables" (côté algorithmes) pour lesquels nombre de cas d'utilisation (ce qu'on en attend) sont bien définis.

    La difficulté lorsqu'on veut utiliser ces joujoux est d'arriver à se mettre dans la peau de ceux pour qui il a été destiné pour comprendre comment sont construites les solutions proposées.

    On a un peu le même soucis avec le Python de base. Au début on fait des exercices pour apprendre boucles, conditions, listes,... puis lorsqu'on en a marre de répéter les mêmes constructions, on va trouver une bibliothèque standard, une fonction qui... Et il n'y a rien de plus frustrant pour le débutant qui patauge à écrire des trucs simples de voir que les plus avancés utiliseront des "trucs" qu'il ignore.

    - 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. Réponses: 1
    Dernier message: 13/08/2006, 13h17
  2. liste sur formulaire
    Par milielf dans le forum Access
    Réponses: 10
    Dernier message: 18/05/2006, 15h35
  3. [PHP-JS] Afficher une liste sur la page ?
    Par bzoler dans le forum Langage
    Réponses: 7
    Dernier message: 27/01/2006, 09h41
  4. [Struts]Affiche d'une liste sur plusieurs pages
    Par guillaume_85 dans le forum Struts 1
    Réponses: 3
    Dernier message: 24/06/2005, 20h23
  5. Même liste sur 26 pages différentes
    Par krfa1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 18/03/2005, 11h32

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