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 :

remplir un tableau 2D


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut remplir un tableau 2D
    Bonjour à tous,

    J'extrais les données d'un fichier, je lis ligne par ligne, je sépare les éléments de chaque ligne (séparateur = \t).
    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
    from os import chdir, getcwd
    chdir("H:/programs/python_programs/files")
    rep_cour = getcwd()
     
    f = open('DIXA-001.txt','r')
    lignes  = f.readlines()
    f.close()
     
    table = []
     
    for index in range(1, len(lignes)):
    	data = lignes[index].rstrip("\n")
    	list = data.split("\t")
     
    	# check these 2 colomns are always equal
    	if list[9] != list[10] :
    		print(index)
    J'aimerais ensuite, mettre le tout dans un tableau 2D (var : table)

    Ceci ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	# list = data of one line	
    	for i in range(0, len(list)):	
    		table[i][index]= list[i]
    erreur : IndexError: list index out of range
    J'ai essayé en créant un tableau 2D vide, avant les boucles, mais j'avais la même erreur

    Sinon, je remplis mon tableau ansi :
    Mais ensuite, je voudrais avoir la matrice transposée, connaissez-vous des fonctions ?

    D'avance merci,

  2. #2
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Voila un code pour le tableau transposé, mais j'ai toujours la même erreur ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	for i in range(len(table)):
    		# iterate through columns
    		for j in range(len(table[0])):
    			transposed[j][i] = table[i][j]
    transposed[j][i] = table[i][j]
    IndexError: list index out of range

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Ce que vous appelez "tableau" n'est qu'une liste de listes. Et si vous essayez d'accéder à liste[i] avec un i qui ne vérifie par len(liste) <= i < len(liste), cela vous retournera IndexError. Vous n'avez pas 36 solutions: créer une liste à N éléments et les remplacer par les valeurs désirées, faire des .append pour ajouter les éléments au fur et à mesure.
    C'est pareil pour "transposed"! Sauf que vous pouvez dans ce cas utiliser la fonction zip pour fabriquer la transposée.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Merci pour votre réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	for i in range(0, len(list)):	
    		table[i][index]= list[i]
    table est une liste vide
    dans le for, i va prendre la valeur de 0 à la longueur de list ... donc, list[i] existe toujours non ? Que dois-je vérifier ? Je suis un peu perdue.

    Je dois obligatoirement créer une liste 'table' vide ? je ne peux pas déclarer un objet en lui assignant en même temps une valeur ? table[i][index]= list[i]

    D'avance merci.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    table est une liste vide
    dans le for, i va prendre la valeur de 0 à la longueur de list ... donc, list[i] existe toujours non ? Que dois-je vérifier ? Je suis un peu perdue.
    Je dois obligatoirement créer une liste 'table' vide ? je ne peux pas déclarer un objet en lui assignant en même temps une valeur ? table[i][index]= list[i]
    Il n'y a rien à vérifier, juste essayez de comprendre ce que vous essayez de faire subir à un objet de type liste.
    Vous pouvez lancer la console Python et "voir" ce qu'il se passe en essayant de "copier" une liste A dans une liste B "vide":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> A = [1, 2, 3, 4]
    >>> B = []
    >>> for i in range(len(A)):
    ...     B[i] = A[i]
    ...
    Traceback (most recent call last):
      File "<stdin>", line 2, in <module>
    IndexError: list assignment index out of range
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Merci, je comprends maintenant. C'est ennuyant, je dois donc parcourir deux fois mon fichier. La première pour connaitre le nombre de lignes et de colonne et ainsi les dimensions de ma future liste. Créer la liste de liste vide puis reparcourir le fichier pour y insérer les données. Je vais faire ainsi, encore merci.

  7. #7
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Citation Envoyé par Jasmine80 Voir le message
    Merci pour votre réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	for i in range(0, len(list)):	
    		table[i][index]= list[i]
    table est une liste vide
    dans le for, i va prendre la valeur de 0 à la longueur de list ... donc, list[i] existe toujours non ? Que dois-je vérifier ? Je suis un peu perdue.

    Je dois obligatoirement créer une liste 'table' vide ? je ne peux pas déclarer un objet en lui assignant en même temps une valeur ? table[i][index]= list[i]

    D'avance merci.
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> t = [1, 2]
    >>> t[3]
    Traceback (most recent call last):
      File "<pyshell#7>", line 1, in <module>
        t[3]
    IndexError: list index out of range
    >>>
    Peut-être confondez-vous les listes. C'est une mauvaise idée de nommer une liste par "list".

    Et ainsi que le disait wiztrics, append est utile afin de dimensionner le tableau correctement.
    Il n'est pas utile de lire le fichier à deux reprises!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> lst1 = [1, 2, 3]
    >>> nv = []
    >>> for ind in range(len(lst1)):
    	nv.append(lst1[ind])
     
     
    >>> nv
    [1, 2, 3]
    >>>
    Clodion

    PS: pour une transposition simple d'une liste de listes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
     
    nv = [[] for x in range(len(lst[0]))]
    for lig in range(len(lst[0])):
        for col in range(len(lst)):
            nv[lig].append(lst[col][lig])
    print(lst)
    print(nv)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> 
    [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
    [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]
    >>>

  8. #8
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Citation Envoyé par Clodion Voir le message
    Peut-être confondez-vous les listes. C'est une mauvaise idée de nommer une liste par "list".

    Et ainsi que le disait wiztrics, append est utile afin de dimensionner le tableau correctement.
    Il n'est pas utile de lire le fichier à deux reprises!!
    [/CODE]
    Oui, merci, j'ai renommé 'list', 'data_list'. 'Table' a comme colonnes les lignes de mon fichier (sauf la premières avec les entêtes), et comme lignes ses colonnes. Je ne peux donc pas créer d'avance un tableau vide sans avoir compter mes lignes et colonnes du fichier d'entrée. Enfin, comme je n'ai que 2 fichiers, je peux toujours tricher et manuellement entrer ces données.

    Je lis le fichier, je crée 'table' qui a sa structure, en y ajoutant une ligne après une autre (une ligne = une liste au sein de cette liste de liste), je la transpose pour obtenir ce dont j'ai besoin.

    ... tiens, peut-être qu'en utilisant 'readline()', en ayant un string à manipuler avec 'split()' ... ça serait peut-être plus simple !


    Citation Envoyé par Clodion Voir le message
    PS: pour une transposition simple d'une liste de listes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    lst = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
     
    nv = [[] for x in range(len(lst[0]))]
    for lig in range(len(lst[0])):
        for col in range(len(lst)):
            nv[lig].append(lst[col][lig])
    print(lst)
    print(nv)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> 
    [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
    [[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]
    >>>
    Merci, ça me sera très utile quand j'aurai ma première liste de liste.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/12/2005, 16h39
  2. remplir un tableau sans doublons ...
    Par ryo-san dans le forum C
    Réponses: 22
    Dernier message: 10/11/2005, 12h43
  3. Remplir un tableau associatif
    Par photorelief dans le forum Langage
    Réponses: 1
    Dernier message: 04/11/2005, 18h20
  4. Lire et remplir un tableau
    Par harris_macken dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 26/09/2005, 01h10
  5. [PHP-JS] Remplir un tableau javascript selon un tableau php
    Par jerome38000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/01/2005, 14h02

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