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 :

transposé d'une matrice de chaine de caractére carré


Sujet :

Python

  1. #1
    Membre du Club
    Inscrit en
    Juin 2010
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 151
    Points : 43
    Points
    43
    Par défaut transposé d'une matrice de chaine de caractére carré
    bonjour jai une matrice de chaine de caractère liste de liste.je veux avoir la transposé de cette matrice.la matrice est non carrée au début donc je vais ajouter des elements "" pour la rendre carrée puis j'effectue la transformation.le probléme que j'ai une erreur index out of range au niveau de la ligne ou jecris liste7[j][i].
    le résulta que je veux trouvé est le suivant:liste2=['a','e','h','m'],['b','e','i','n'],....
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    import sys
    import re
    def main():
    	liste7=[['a','b','c'],['d','e','f','j'],['h','i'],['m','n','o','p','k','l']]
    	liste=[]
    	for i in range(len(liste7)):
    		for j in range(len(liste7)):
    			liste.append(len(liste7[j]))
    		max=0
    		for i in range(len(liste)):
    			if liste[i]>max:
    				max=liste[i]
    				indice_max=i
    		print "le max",max
    		for i in range(len(liste7)):
    			if (len(liste7[i])<max):
    				print "inf a max",len(liste7[i])
    				diff=max-len(liste7[i])
    				for k in range(diff):
    					liste7[i].append("")
    		print liste7
    		for i in range(len(liste7)):
    			print len(liste7[i])
    		liste2=[]
    		for i in range(len(liste7)-1):
    			for j in range(len(liste7[i])-1):
    				print liste7[i][j]
    				liste2.append(liste7[j][i])
    			print liste2
    			liste2=[]
    main()

  2. #2
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Bonjour,

    Déjà, pourquoi ouvrir une nouvelle discussion alors que c'est la suite de celle-ci ?
    Si tu ne comprends pas les réponses qui ont été faites, pose des questions sans relancer une nouvelle discussion !

    Ensuite, c'est dommage de t'arrêter dans la description de ce que tu veux obtenir :

    le résulta que je veux trouvé est le suivant:liste2=['a','e','h','m'],['b','e','i','n'],....
    C'est justement là que ça devient intéressant (le plus petit élément (liste) de ta liste de départ n'a que 2 éléments) : que veux tu comme troisième "ligne" ?

  3. #3
    Membre du Club
    Inscrit en
    Juin 2010
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 151
    Points : 43
    Points
    43
    Par défaut resultat attendu
    je veux
    liste2=[['a','d','h','m'],['b','e','i','n'],['c','f','"','o'],['"','j','"','p'],['"','"','"','k'],['"','"','"','l']]

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 484
    Points : 9 286
    Points
    9 286
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Solution proposée:

    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
    16
    17
    18
    19
     
    liste7=[['a','b','c'],['d','e','f','j'],['h','i'],['m','n','o','p','k','l']]
     
    #calcul du nb maxi d'élément de ligne:
    jmax = max([len(ligne)  for ligne in liste7])
    print jmax
    # 6
     
    # ajustement de toutes les lignes à jmax
    for ligne in liste7:
        while len(ligne)<jmax:
            ligne.append("")
    print liste7
    # [['a', 'b', 'c', '', '', ''], ['d', 'e', 'f', 'j', '', ''], ['h', 'i', '', '', '', ''], ['m', 'n', 'o', 'p', 'k', 'l']]
     
    # transposé:
    T = [[liste7[i][j] for i in xrange(0,len(liste7))] for j in xrange(0,jmax)]
    print T
    # [['a', 'd', 'h', 'm'], ['b', 'e', 'i', 'n'], ['c', 'f', '', 'o'], ['', 'j', '', 'p'], ['', '', '', 'k'], ['', '', '', 'l']]
    Ok?

    Tyrtamos

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 439
    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 439
    Points : 37 030
    Points
    37 030
    Par défaut
    Salut
    Dividee vous a déjà donné la solution dans un autre post, non?
    En Python, tout cela peut se réduire à zip(*M) si M est 'carrée'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def transpose(d):
        length = len(max(d))
        return zip(* [ e + [ '' ] * (length - len(e)) for e in d ])
     
    if __name__ == '__main__':
        D = [['a','b','c'],['d','e','f','j'],['h','i'],['m','n','o','p','k','l']]
        print transpose(D)
    Et il doit sans doute y avoir plus court.
    - W

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/01/2009, 19h47
  2. Récuperer une partie de chaine de caractère
    Par lolo_bob2 dans le forum Access
    Réponses: 6
    Dernier message: 06/07/2006, 19h34
  3. Réponses: 7
    Dernier message: 21/06/2006, 17h42
  4. Réponses: 1
    Dernier message: 25/04/2006, 17h06
  5. Remplacer une PARTIE de chaine de caractères dans un champ
    Par Turlututuchapopointu dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/08/2005, 12h57

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