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 :

Utilisation de set


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Par défaut Utilisation de set
    Salut

    J'essaye d'utiliser un Set dans une boucle for d'une méthode et lors de l'appel à la méthode add la boucle s'arrête après une itération.

    Code :
    ------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    mySet = Set[]
     
    def maMethode(chaine):
       mList = chaine.split(' ')
       for m in mList:
           mySet.add(m)
     
    maMethode('un deux deux trois')
    print mySet
    -----

    Le print donne "un"et on sort on ne peut rien executer après add dans la boucle for.


    Pouvez-vous m'éclairer ?

    Merci

  2. #2
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonsoir,
    chez moi j'obtiens Set(['un', 'trois', 'deux']). Je suis sous Python 2.6.

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    c'est quoi ?
    s'pas mieux ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    setmoissa = lambda phrase: set(phrase.split())
     
    monset = setmoissa("un deux deux trois")
    print monset

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Citation Envoyé par rambc Voir le message
    Bonsoir,
    chez moi j'obtiens Set(['un', 'trois', 'deux']). Je suis sous Python 2.6.
    Sans modifier la première ligne ?
    Mais bon, moi aussi j'ai ce résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) 
    [GCC 4.4.5] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> mySet = set()
    >>> def maMethode(chaine):
    ...    mList = chaine.split(' ')
    ...    for m in mList:
    ...        mySet.add(m)
    ... 
    >>> maMethode('un deux deux trois')
    >>> print mySet
    set(['un', 'trois', 'deux'])
    Y compris comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    mySet = set()
     
    def maMethode(chaine):
        for m in chaine.split():
            mySet.add(m)
     
    maMethode('un deux deux trois')
    print mySet
    Je trouve que c'est plus lisible que lambda

    @+

  5. #5
    Membre chevronné Avatar de Pierre Maurette
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 283
    Par défaut
    Je ne vois pas trop comment le code initial, même légèrement corrigé, a pu afficher "un".
    Je ne trouve pas le lamda particulièrement illisible, mais en revanche plutôt à éviter quand il est gratuit. Moins maintenable, et il peut casser des outils (vue outline, refactoring, etc.). Sans lamdda, c'est tout aussi simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def buildSet(chaine):
        return set(chaine.split(' '))
     
    mySet = buildSet('un deux deux trois')
    print mySet
    mySet = mySet.union(buildSet('one two three two'))
    print mySet
    mySet = buildSet('one two three two')
    print mySet
    Notez que le comportement n'est pas le même que celui de la fonction du message initial. L'utilisation immodérée des foo, bar et autres maMethode peut masquer des erreurs de conception. Ce n'est pas plus cher d'utiliser des noms significatifs dès le brouillon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def mySetAddElems(chaine):
        for m in chaine.split():
            mySet.add(m)
     
    mySet = set()
    mySetAddElems('un deux deux trois')
    print mySet
    mySetAddElems('one two three two')
    print mySet
    Là, on peut rendre la fonction un peu plus réutilisable et un peu moins piégée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def addElems(chaine, set):
        for m in chaine.split():
            set.add(m)
     
    mySet = set()
    print mySet
    addElems('un deux deux trois', mySet)
    print mySet
    addElems('one two three two', mySet)
    print mySet

  6. #6
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Bonjour.

    Citation Envoyé par PauseKawa Voir le message
    Sans modifier la première ligne ?
    Si je te rassure.

  7. #7
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> mySet = Set[]
      File "<stdin>", line 1
        mySet = Set[]
                    ^
    SyntaxError: invalid syntax
    >>>

  8. #8
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Je voulais dire : "Si je te rassure, j'ai bien modifié la ligne...".

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/04/2007, 13h59
  2. Utilisation des set
    Par Ikit dans le forum C++
    Réponses: 16
    Dernier message: 22/11/2006, 16h12
  3. Utilisation des sets
    Par Original Prankster dans le forum SL & STL
    Réponses: 6
    Dernier message: 08/02/2006, 21h28
  4. utiliser les set en C++
    Par yaskiki dans le forum C++
    Réponses: 2
    Dernier message: 05/10/2005, 16h04
  5. utilisation de set locale
    Par ColonelHati dans le forum C
    Réponses: 7
    Dernier message: 02/05/2005, 14h25

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