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 :

Tri de nombres


Sujet :

Python

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Points : 17
    Points
    17
    Par défaut Tri de nombres
    Bonjour à tous, je suis debutant en python et ai besoin de votre aide.
    En fait je dispose d'un vecteur de nombres réels. Je souhaite trier cette liste par ordre décroissant des termes. Sa c'est bon mais ensuite je souhaite pouvoir appliquer cette transformation à d'autres vecteurs de même taille. Autrement dit si ce tri à conduit à échanger un certain nombre de termes, je veut que ces changement s'opère aussi à mon autre vecteur....

    Voila je ne sais pas si une fonction existe dans python pour faire cela.

    MERCI

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Points : 102
    Points
    102
    Par défaut
    Okay, donc si je comprends bien, tu as plusieurs listes de taille identique et tu souhaites les trier toutes suivant l'ordre de la première ?

    Dans la mesure du possible, si tu peux transformer tes N list en une liste unique de N tuple, tu auras une solution ultra simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    # Voici la liste de tuple:
    l = [(A1, B1, ..., P1), (A2, B2, ..., P2), ..., (An, Bn, ..., Pn)]
    # Pour trier la liste :
    l.sort()
    Si tu ne peux pas changer ta structure de données, il faut passer par une étape ou transformes tes N listes en une liste de N tuple, ensuite tu la tries et finalement tu ré-extraits tes N listes.

    Voila un exemple rapide.
    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
     
    a = [4, 2, 3]
    b = [2, 2, 2]
    c = [3, 2, 1]
     
    l = zip(a, b, c)
    print l
    l.sort()
    print l
     
    a=[it[0] for it in l]
    b=[it[1] for it in l]
    c=[it[2] for it in l]
     
    print a, b, c

  3. #3
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a=[it[0] for it in l]
    b=[it[1] for it in l]
    c=[it[2] for it in l]
    Peut être remplacé par :
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    J'ai essayer ce que vous proposez mais quand je fait print a,b tout à la fin mais vecteurs a et b n'ont pas changer par rapport à ceux d'origine malgrer le l.sort()?!

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    a si c bon desole j'avais fait une petite erreur...Merci en tout cas!!!

  6. #6
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    C'est bizarre, pourtant ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    a = [4, 2, 3]
    b = [2, 2, 2]
    c = [3, 2, 1]
     
    l = zip(a, b, c)
    print l
    l.sort()
    print l
     
    a, b, c = zip(*l)
     
    print a, b, c
    donne comme résultat avec Python 2.5.2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [(4, 2, 3), (2, 2, 2), (3, 2, 1)]
    [(2, 2, 2), (3, 2, 1), (4, 2, 3)]
    (2, 3, 4) (2, 2, 2) (2, 1, 3)
    Les listes sont bien modifiées.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Points : 102
    Points
    102
    Par défaut
    Ah ouais, bien vu le zip(*l) j'ai vaguement cherché comment y arriver en une itération mais j'avais pas pensé a cette utilisation 'inverse' de zip.

    Merci pour l'info.

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    Bonsoir, en fait j'ai une autre question sur ce sujet.
    Quand le vecteur b ,que je doit modifier en fonction des changement qui ont été faits dans le vecteur trié a, est complex, python me renvoi qu'il est impossible d'établir un ordre entre des nombre complex....ce qui est logique mais pourtant le tri est fait sur a qui est à valeur réelle....pensez vous pouvoir contourner ce probleme???

    MERCI

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Points : 102
    Points
    102
    Par défaut
    Si j'ai bien compris ton problème, cela arrive lors de la comparaison de deux tuple dont les premières valeurs sont identiques.
    Dans ce cas la, le tri par défaut va comparer les 2eme éléments de tes tuple afin de les départager, ce que tu ne souhaites apparemment pas. Il faut donc explicitement dire que tu ne veux faire les comparaisons que sur les premières valeurs de tes tuple.

    Voila comment le faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l.sort(cmp=lambda x,y:cmp(x[0],y[0]))

  10. #10
    Membre extrêmement actif
    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
    Points : 1 658
    Points
    1 658
    Par défaut
    shadowsam, il vaut mieux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from operator import itemgetter
    l.sort(key=itemgetter(0))
    «In general, the key and reverse conversion processes are much faster than specifying an equivalent cmp function. This is because cmp is called multiple times for each list element while key and reverse touch each element only once. »




    anthony, je trouve que l'emploi du mot "vecteur" que tu fais n'est pas bon. Ça m'a empêché de comprendre ton premier message et dans le dernier ça me pose encoe des problèmes.
    Pour moi un vecteur est un objet mathématique, pas une variable ou un objet Python. Dans ton premier message, je me suis demandé si l'appellation vecteur désignait quelque chose de Python que je ne connaissais pas, un bidule du module numpy par exemple. Mais à lire la suite je ne crois pas: tu emploies vecteur pour signifier une liste.
    C'est embêtant parce que quand on lit dans le premier message «je dispose d'un vecteur de nombres réels», on n'est vraiment pas engagé à imaginer que les nombres de la liste puissent être complexes, puisque d'une part tu dis qu'ils sont réels mais qu'en plus, un vecteur est à ma connaissance un objet mathématique qui n'a que des composantes réelles dans un espace à n dimensions, mais pas des composantes complexes. À moins que mes connaissances mathématiques soient trop faiblardes ou anciennes.
    Pour quelqu'un d'expérimenté en Python, le problème qui arrive ensuite sur ces mauvaises bases est prévisible. Mais heureusement que shadowsam a compris, parce que moi je ne sais pas si j'aurais compris le problème. On ne voit pas pourquoi la liste b pourrait être soudainement complexe et pas a. Enfin bref, pour moi c'est une drôle de soupe.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    Points : 102
    Points
    102
    Par défaut
    Ah voila, il me semblait bien qu'il y avait un moyen de le faire directement... mais j'avais oublié cette API.

    Merci.

  12. #12
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    un vecteur est à ma connaissance un objet mathématique qui n'a que des composantes réelles dans un espace à n dimensions, mais pas des composantes complexes
    Tout dépend justement de l'espace considéré : si c'est C^n (avec C l'ensemble des nombres complexes) alors les composantes seront des nombres complexes.
    A priori, mais à confirmer, un vecteur mathématique peut contenir tout type d'entité du moment que le type reste le même pour chaque composante.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  13. #13
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    a ok merci pour l'info sa fonctionne bien....

    Pour revenir à l'utilisation du mot "vecteur" en fait c juste parce que dans le travail que je fait j'utilise vraiment des vecteurs au sens mathematique du terme. En fait je doit reproduire une maquette matlab mais avec python. Donc la prochaine fois j'essaierai d'etre plus clair

    encore merci pour votre aide

Discussions similaires

  1. Problème (algorithmique) de tri de nombres
    Par t26 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/07/2007, 12h51
  2. Tri de nombres à virgule
    Par RuesToulonnaises dans le forum Langage SQL
    Réponses: 9
    Dernier message: 29/05/2007, 12h15
  3. [VB EXCEL] Problème tri de nombre
    Par jbidou88 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/03/2007, 21h18
  4. Problème de tri entre nombre et lettre
    Par bikork dans le forum Delphi
    Réponses: 5
    Dernier message: 07/06/2006, 20h16
  5. Problème de tri de nombre négatif dans un état
    Par loutsky dans le forum Access
    Réponses: 11
    Dernier message: 21/04/2006, 14h30

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