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 :

probleme de syntaxe


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de KINENVEU
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Par défaut probleme de syntaxe
    je reprends un exemple de la FAQ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    l = 2 * range(4)  ##  [0, 1, 2, 3, 0, 1, 2, 3]
    l = [x for x in l if x!=0]
    print l  ##  [1, 2, 3, 1, 2, 3]
    ce que je voudrais faire (toujours sur la meme instruction)
    c'est un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    l = [x for x in l if x!=0 else None] # [None, 1, 2, 3, None, 1, 2, 3]
    mais ca ne marche pas,
    ma syntaxe doit etre incorrecte.

  2. #2
    Membre Expert
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    def test():
        l = 2 * range(4)
        g = [x != 0 and x or None for x in l]
     
        print g
     
    def test1():
        def comp(v):
            if v == 0:
                return None
            else:
                return v
     
        l = 2 * range(4)
        g = [comp(x) for x in l]
     
        print g
     
    def test2():
        def comp(v):
            if v == 0:
                return None
            else:
                return v
     
        l = 2 * range(4)
        g = map(comp, l)
     
        print g
     
    test()
    test1()
    test2()
    C'est un peu spécial comme syntaxe et pas très lisible !! c'est le moins qu'on puisse dire, il vaut mieux d'après moi soit passer par une fonction pour la lisibilité, soit par map ou alors bien commenter la 1ere version.

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Ta syntaxe est incorrecte parce que le else n'est pas accepté dans ce contexte.
    Mais on peut mettre en 1er un "if..else particulier: (cond and [si_oui] or [si_non])[0].

    Essaye ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    l = [0, 1, 2, 3, 0, 1, 2, 3]
     
    print [(x==0 and [None] or [x])[0]for x in l]
     
    [None, 1, 2, 3, None, 1, 2, 3]
    Tyrtamos

  4. #4
    Membre confirmé Avatar de KINENVEU
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Par défaut
    oui, c'est ce que je cherchais.
    merci.

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Depuis Python 2.5, il y a une nouvelle syntaxe pour les expressions conditionnelles, qui est en fait proche du code original de KINENVEU:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> l = 2 * range(4)
    >>> [x if x <> 0 else None for x in l]
    [None, 1, 2, 3, None, 1, 2, 3]
    C'est quand même plus joli que le hack avec and/or...
    C'est à comparer avec l'opérateur ternaire en C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    en C:      (cond ? a : b)
    en Python: (a if cond else b)
    La partie "else" est obligatoire, contrairement à un "if" ordinaire.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut minijupe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    li = 2 * range(4)
    li = [ (None,x)[x>0] for x in li ]
    print li
    Vive Python !

    Finalement le truc c'est de mettre for x in li à la fin

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

Discussions similaires

  1. probleme de syntaxe sql dans VB
    Par njac dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 20/05/2005, 14h41
  2. [VB.NET] Probleme de syntaxe
    Par microthib dans le forum Windows Forms
    Réponses: 4
    Dernier message: 17/03/2005, 13h49
  3. probleme fonction syntaxe
    Par gIch dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/02/2005, 09h52
  4. [Débutante] Problèmes de syntaxe
    Par new_wave dans le forum Prolog
    Réponses: 4
    Dernier message: 02/11/2004, 18h39
  5. Problemes de syntaxe
    Par maahta dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 01/10/2003, 13h40

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