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 :

fonction sort() - tri �trange


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Ao�t 2013
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2013
    Messages : 6
    Par d�faut fonction sort() - tri �trange
    Bonjour,

    Je me casse la t�te avec la fonction sort() depuis un moment et je cherche � comprendre.

    Pour r�sum�, je dois trier plusieurs lignes ayant plusieurs colonnes (nombres r�els) s�par�es par des espaces. Le tri s'effectue uniquement sur la valeur de la 1�re colonne.

    Exemple ultra simplifi� de mon fichier source :
    9.75 11.4133
    10.75 12.4133
    10.875 12.5383
    11 12.6633 12.4472
    9.875 11.5383 11.3222
    Et je veux obtenir ceci :

    9.75 11.4133
    9.875 11.5383 11.3222
    10.75 12.4133
    10.875 12.5383
    11 12.6633 12.4472
    Facile ?

    Je lis mon fichier, je le stocke dans une liste et j'appelle la fonction sort()... seulement voil� ce que j'obtiens :

    print("[DEBUG] -------- DATALIST avant tri : -----------------------\n")
    print(dataListIR)
    print("[DEBUG] -------- DATALIST apres le tri : -----------------------\n")
    dataListIR.sort()
    print(dataListIR)
    [DEBUG] -------- DATALIST avant tri : -----------------------

    ['9.75 11.4133 \n', '10.75 12.4133\n', '10.875 12.5383\n', '11 12.6633 12.4472\n', '9.875 11.5383 11.3222\n']
    [DEBUG] -------- DATALIST apres le tri : -----------------------

    ['10.75 12.4133\n', '10.875 12.5383\n', '11 12.6633 12.4472\n', '9.75 11.4133 \n', '9.875 11.5383 11.3222\n']
    Et l�, j'ai beau me creuser la t�te, je ne comprends pas comment sort() se d�brouille et comment m'en sort[ir].

    Je pr�cise que j'avais d�j� eu le m�me genre de cas sous bash, et que j'avais r�solu le souci en forcant la variable d'environnement LC_ALL="C"... mais Python ne semble pas s'y int�resser.

    Quelqu'un pourrait-il me guider un peu ? Merci

    Amicalement,

  2. #2
    Expert confirm�

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par d�faut
    Salut,

    Le r�sultat que tu obtiens est tout � fait correct.

    La cha�ne de texte '1.....' pr�c�de '9....' dans l'ordre alphab�tique.

    Je ne vois que la conversion des donn�es comme solution.

    Exemple:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    vals = ['9.75 11.4133',
            '9.875 11.5383 11.3222',
            '10.75 12.4133',
            '10.875 12.5383',
            '11 12.6633 12.4472']
    out = []
    for v in vals:
        out.append([float(i) for i in v.split()])
    out.sort(cmp=lambda x, y: cmp(x[0], y[0]))
    print out
    ce qui donne:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    [[9.75, 11.4133], [9.875, 11.5383, 11.3222], [10.75, 12.4133], [10.875, 12.5383], [11.0, 12.6633, 12.4472]]

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Ao�t 2013
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2013
    Messages : 6
    Par d�faut
    Salut Vincent,

    Que dire que dire... � part que j'�tais un peu trop ferm� sur mon id�e et que j'ai compl�tement zap� le d�tail que c'�tait effectivement le 1er �l�ment de la cha�ne qui est compar�

    Bon, du coup je vais effectivement passer par la conversion de donn�es, ce qui me g�ne un peu car j'ai des lignes qui peuvent contenir quand m�me jusqu'� 70 �l�ments... je voulais donc �viter cette solution, mais bon, �a ira pour le cas que j'ai � traiter.

    Merci beaucoup pour ta r�ponse et ton bout de code. C'est clair pour moi maintenant

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Tri d'un tableau 2D sans la fonction sort
    Par mamax29 dans le forum Langage
    R�ponses: 4
    Dernier message: 23/03/2011, 16h57
  2. Tri par la fonction "sort"
    Par kira9744 dans le forum MATLAB
    R�ponses: 3
    Dernier message: 09/12/2010, 18h30
  3. R�ponses: 5
    Dernier message: 25/11/2008, 09h56
  4. tri (fonction Sort)
    Par R�viAT dans le forum Macros et VBA Excel
    R�ponses: 6
    Dernier message: 25/03/2008, 11h24
  5. R�ponses: 2
    Dernier message: 08/04/2004, 16h30

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