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 :

Set et Tuple


Sujet :

Python

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut Set et Tuple
    J'ai un set :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my_Set0= {"orange", 'banana', 'pear', 'apple'}
    if "orange" in Set0:
               print("OK")
    J'ai un set comprenant un Tuple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my_Set0= {("orange", 3), 'banana', 'pear', 'apple'}
    if ("orange", 3) in Set0:
               print("OK")
    Je voudrai que le print me renvoir la deuxième valeur du Tuple si la première valeur du Tuple est "orange".

    Savez-vous si c'est possible de faire cela? Merci d'avance de votre réponse.

    Cordialement,
    Arsène

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Arsene12 Voir le message
    Je voudrai que le print me renvoir la deuxième valeur du Tuple si la première valeur du Tuple est "orange".
    Il faudrait commencer par tester la première valeur du tuple... mais c'est sûr que si vous avez une collection d'objets disparates, "tester" sera aussi fonction de leur type.
    Ceci dit, "je voudrais" n'indique en rien les difficultés que vous rencontrez (et que vous devriez savoir faire après avoir ouvert un tuto).

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

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Le problème avec les sets, c'est qu'il n'y a pas de clés. On peut uniquement tester si un élément est présent ou pas dans le set.
    Ici j'ai besoin de savoir si le set contient un Tuple dont le premier élément est "orange".
    J'ai pas eu la réponse dans les tutos car c'est un cas particulier.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Ici j'ai besoin de savoir si le set contient un Tuple dont le premier élément est "orange".
    J'ai pas eu la réponse dans les tutos car c'est un cas particulier.
    Dans les tutos, vous apprenez à écrire des boucles permettant de tester chaque élément du set et tester s'il vérifie ou pas vos conditions i.e. écrire du code à défaut de savoir réutiliser.
    Cela fait, il permet d'illustrer/montrer ce que vous voulez - ou de vous poser des questions quant à l'alignement de vos données par rapport aux traitements attendus -.

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

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Dans les tutos, vous apprenez à écrire des boucles permettant de tester chaque élément du set
    - W
    Si le set ne comprend qu'un élément, y'a pas besoin de boucle:

    J'aimerai obtenir le type du premier élément (print(type(element0)).
    Et j'aimerai ensuite récupérer le 1er élément du Tuple.

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    J'aimerai obtenir le type du premier élément (print(type(element0)).
    Par définition, un "set" est une collection d'objets non-ordonnée. Donc parler du premier, du deuxième élément, du n-ième élément n'a pas de sens (contrairement aux collections de type "séquence" que sont listes, tuples, chaînes de caractères,...).
    Donc soit le "set" n'est pas approprié à ce que vous voulez faire, soit vous bouclez même lorsqu'il n'y a qu'un élément...

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

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Effectivement, vous avez raison, il faut d'abord que je boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    my_Set0= {("orange", 3), 'banana', 'pear', 'apple'}
           for x in Set0:
             if "orange" in x:
               print("OK")     # ça marche
     
    my_Set0= {("orange", 3), 'banana', 'pear', 'apple'}
           for x in Set0:
             if "tomate" in x:
               print("OK")   
             else 
               print("pas de tomate")

    Il reste plus maintenant qu'à récupérer la valeur du Tuple contenant ''orange".

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Il reste plus maintenant qu'à récupérer la valeur du Tuple contenant ''orange".
    Ce qui est trivial puisqu'un tuple est ordonné.
    note: et quand vous m'aurez montré comment vous faîtes çà, je vous montrerais comment on peut faire plus simplement.

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

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ce qui est trivial puisqu'un tuple est ordonné.
    note: et quand vous m'aurez montré comment vous faîtes çà, je vous montrerais comment on peut faire plus simplement.
    - W
    Je suis sur la bonne voie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my_Set0= {("orange", 3), 'banana', 'pear', 'apple'}
           for x in Set0:
             if "orange" in x:
               print(x, type(x))
    Voici la réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ('orange', 3) <class 'tuple'>
    J'attends donc que vous me montriez comment récupérer la 2ème valeur du Tuple.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    J'ai déjà la réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my_Set0= {("orange", 3), 'banana', 'pear', 'apple'}
           for x in Set0:
             if "orange" in x:
               print(x[1])

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    J'attends donc que vous me montriez comment récupérer la 2ème valeur du Tuple.
    non pour çà, vous ouvrez votre tuto. au chapitre tuple...
    Je vous montrerais seulement qu'il serait plus efficace d'organiser vos données autrement.

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

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    J'ai quasiment tout trouvé moi-même mais vous m'avez quand même bien aiguillé. Je vous remercie.

    Le set convient ici parfaitement à ce que je suis en train de faire. J'ai pas besoin d'une autre organisation je pense.

    Mais j'ai été sur le tuto relatif au Tuple : https://python.developpez.com/cours/...=page_12#L10.3

    Je suis à votre écoute, vos enseignements sont toujours bons à prendre.

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    Le set convient ici parfaitement à ce que je suis en train de faire. J'ai pas besoin d'ordonné.
    Super!
    Maintenant reprenez votre problème à la base.
    Utiliser un "set": ("orange", 3), 'banana', 'pear', 'apple' pour dire il y a 3 "orange" (et on n'a pas compté les autres), c'est utiliser une collection d'objets disparates qui font perdre la propriété essentielle d'un set qui est "est dans". D'où la difficulté à récupérer "orange".
    Maintenant si on dit, j'ai un tas de fruits "orange", 'banana', 'pear', 'apple' auxquel je veux associer une quantité (si je la connais), s'écrit ("orange", 3), ('banana', None), ('pear', None), ('apple', None). Et la collection la plus adaptée pour associer une clef (le nom de fruit) à quelque chose d'autre est le dictionnaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> mydict = dict([("orange", 3), ('banana', None), ('pear', None), ('apple', None)])
    >>> if 'orange' in mydict:
    ...    print (mydict['orange'])
    ...
    3
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Merci pour ces infos. Si j'ai souhaité utiliser un set à la place d'un dictionnaire, c'est pour que l'exécution de mon programme soit plus rapide. J'ai testé et je ne gagne pas plus de temps avec un set qu'avec un dictionnaire. Je vous explique en quoi consiste mon programme :

    J'ai par exemple un dictionnaire qui compte x clés, chacune associée à une valeur. J'ai un texte qui compte y mots. Pour chaque mot, mon programme recherche si le mot est identique à une clé du dictionnaire, et si c'est le cas il le remplace par sa valeur correspondante.

    Plus x et y sont grands, plus la durée d'exécution du programme est grande aussi. C'est pour cette raison que je souhaitais utiliser un set à la place d'un dictionnaire car vérifier qu'un élément est présent dans un set est beaucoup plus rapide que vérifier qu'un élément est présent dans un dictionnaire.

    Dans mon programme (rechercher/remplacer en grand nombre), le temps d'exécution est rester le même.

    J'ai utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
               contenu = contenu.replace(myVal, x[1])
    ou
               re.sub(r'myVal','x[1]',contenu)
    la vitesse est la même aussi

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    car vérifier qu'un élément est présent dans un set est beaucoup plus rapide que vérifier qu'un élément est présent dans un dictionnaire.
    Ce sont les mêmes algorithmes. La durée devrait être à peu près égale mais peut varier d'une exécution à l'autre car la clef de hash n'est pas toujours la même (ce qui peut jouer sur le nombre de collisions) i.e. parfois ce sera plus rapide avec "set" parfois avec "dict".

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

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Février 2003
    Messages
    926
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 926
    Points : 273
    Points
    273
    Par défaut
    Je chronomètrerai plus tard pour savoir si c'est plus rapide avec le set ou avec le dictionnaire.

    Pour l'instant, j'ai donc un dossier contenant 2 fichiers :
    - un fichier excel contenant dans une colonne les mots à remplacer, dans une autre les mots de remplacement.
    - un fichier text qui contient le texte où l'on veut remplacer les mots.
    + le fichier python .py

    Et je trouve que ce programme est très bien car il permet non seulement de mesurer la vitesse de traitement de sa machine mais aussi de comparer python à d'autres langages. On peut facilement le comparer à Visual Basic par exemple en faisant une macro dans Word qui exécuterait la même tâche. Je pense que Python doit être plus performant. Je me dis aussi qu'y a surement d'autres solutions qui permettent d'aller encore plus vite.

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Arsene12 Voir le message
    On peut facilement le comparer à Visual Basic par exemple en faisant une macro dans Word qui exécuterait la même tâche. Je pense que Python doit être plus performant.
    Visual Basic étant compilé alors que Python est interprété (en standard), à traitement équivalent, VB sera plus rapide. Un peu de recherche sur Internet devrait vous permettre de trouver des tas de comparaisons entre les différents langages et relativiser les attentes (côté performance) que vous pouvez espérer avec Python.

    - 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. set term ^
    Par tux dans le forum Débuter
    Réponses: 8
    Dernier message: 12/10/2004, 20h42
  2. [Crystal Report] problème de plusieurs tuples à imprimer
    Par Jé_48 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 19/06/2003, 14h40
  3. IB 6.0.1 - Win XP - Character Set
    Par SuperTotor dans le forum InterBase
    Réponses: 4
    Dernier message: 03/06/2003, 20h25
  4. Query data set
    Par Sandra dans le forum JBuilder
    Réponses: 3
    Dernier message: 20/01/2003, 10h08
  5. character set // Nls_lang
    Par fopicht dans le forum Oracle
    Réponses: 2
    Dernier message: 23/05/2002, 12h04

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