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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    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 éprouvé
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    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
    Membre Expert
    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 : 38
    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
    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 :

  4. #4
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    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 averti
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Par défaut
    a si c bon desole j'avais fait une petite erreur...Merci en tout cas!!!

  6. #6
    Membre Expert
    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 : 38
    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
    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.

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 99
    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.

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