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 :

réorganiser un tableau a deux dimensions


Sujet :

Python

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 266
    Par défaut réorganiser un tableau a deux dimensions
    Bonjour, voilà mon problème :

    J'ai à ma disposition un tableau a deux dimensions (une liste de listes) et je souhaite réorganiser ce tableau de la manière suivante: pour la colonne i, je souhaite réorganiser cette colonne i dans l'ordre croissant (resp. décroissant) mais pas seulement la colonne, la ligne entière doit être réorganisée.

    Si j'utilise .sort() sur la colonne je ne sais plus comment réorganiser les autres colonnes.
    Si je cherche le maximum de ma colonne puis son index, j'ai un souci qd je veux chercher le max suivant car une fois le premier max supprimé les index seront décalés !

    Je ne trouve pas de solution, une méthode ne pourrait elle pas m'aider ?

  2. #2
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Bonjour,

    il existe forcément une solution, mais je ne suis pas sûr d'avoir exactement saisi ta question... Un petit exemple serait le bienvenu.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 266
    Par défaut
    voilà un petit exemple :

    soit le tableau a deux dimensions :
    [ [a, 1, 'bonjour'], [b, 3, 'monde'], [c, 2, 'le'] ]

    et par exemple je veux réorganiser selon la colonne 1 (contenant donc les chiffres) dans l'ordre décroissant. alors je veux le resultat suivant :
    [ [b, 3, 'monde'], [c, 2, 'le'], [a, 1, 'bonjour'] ]

    donc je dois utiliser une facon de remanier les lignes entiere suivant l'ordre de la colonne 1 et non juste réorganiser la collone 1...

    une solution serait de récupérer le tableau de la colonne 1 : [1, 3, 2]
    puis d'obtenir l'index des max ici [1,2,0] (premier max en position 1, second max en position 2 et dernier max en position 0)
    ainsi j'ai plus qu'a reorganiser les lignes de mon tableau a deux dimensiosn suivant l'ordre des indices : ligne 1 en position 0, ligne 2 en position 1, ligne 0 en 2

    mais comment récuperer l'index des max d'un tableau ???

    ps : et ce quand on a des valeurs égales dans le tableau de départ...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 266
    Par défaut
    autant pour moi j'ai trouvé la solution:
    pour réorganiser une liste de listes suivant une colonne (comme dans mon exemple), voici un exemple trouvé sur http://wiki.python.org/moin/HowTo/Sorting

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    >>> import operator 
    >>> L = [('c', 2), ('d', 1), ('a', 4), ('b', 3)]
    >>> map(operator.itemgetter(0), L)
    ['c', 'd', 'a', 'b']
    >>> map(operator.itemgetter(1), L)
    [2, 1, 4, 3]
    >>> sorted(L, key=operator.itemgetter(1))
    [('d', 1), ('c', 2), ('b', 3), ('a', 4)]

  5. #5
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Une méthode possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    L = [ ['a', 1, 'bonjour'], ['b', 3, 'monde'], ['c', 2, 'le'] ]
    L1 = [(k[1], k[0], k[2]) for k in L]
    L1.sort(reverse=1)
    L[:] = [[k[1], k[0], k[2]] for k in L1]
    print L
    Basée sur la méthode standard de colorer/trier/décolorer (il y a un autre fil récent où cela est évoqué).
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/03/2006, 17h25
  2. Un string dans un tableau de deux dimensions...
    Par FinalSpirit dans le forum C++
    Réponses: 5
    Dernier message: 15/01/2006, 14h29
  3. [PERL] Trier un tableau a deux dimensions
    Par piregwan dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2005, 22h29
  4. Réponses: 6
    Dernier message: 26/11/2005, 19h55
  5. Réponses: 13
    Dernier message: 13/10/2005, 16h03

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