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 :

Convertir une matrice en liste de listes


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut Convertir une matrice en liste de listes
    Bonjour à tous,

    Je début sur python et je viens ici rechercher de l'aide car je dois écrire un script qui doit lire une matrice dans un fichier (fichier contenant seulement une matrice) et retourner une liste de listes.
    Actuellement j'ai déjà effectué quelque chose pour afficher la matrice mais à aucun moment je ne la convertis en liste de listes.

    J'espère que vous pourrez m'aider rapidement.

    Cordialement.

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    ça n'est pas très compliqué, il suffit soit de lire le fichier et remplir directement la liste de listes, soit triturer les données après coup pour "convertir" en liste de listes

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Lire dans un fichier et réceptionner le contenu je sais faire mais pour transformer en liste de listes, je peux parcourir chaque ligne et dire ok ça c'est une liste mais comment je sais que j'ai atteint la fin de la ligne en python ?

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    tu voudrais pas mettre un bout de code pour qu'on ait de quoi t'aider plus concrètement ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    d'accord pardon je vais le faire

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def list_of_lists(fichier):
         matrix = open(fichier, "r")
                  for row in matrix:
                       for val in row 
                                 print val,
                       print
     
         matrix.close()


    J'ai fait ça mais c'est pas ce qui est demandé....
    Et ici je parcours en colonne la matrice et non en ligne

  7. #7
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    dans ton code tu ouvres le fichier mais tu ne lis rien dedans, ça n'est clairement pas valide, retourner lire les tutoriels serait sans doute une bonne idée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open('matrix') as f:
       l = [map(int, i.split()) for i in f]

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    pourquoi le code me renvoie-t'il quelque chose alors ?

    J'ai réécrit le tout avec une lecture de lignes.

  9. #9
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par wolfman47 Voir le message
    pourquoi le code me renvoie-t'il quelque chose alors ?
    parce qu'en fait c'est moi qui ai besoin de lunettes je sais pas ce que j'ai lu tout à l'heure

    quand tu ouvres le fichier il est considéré comme du texte, toi tu veux lire des valeurs dedans (à priori)
    une méthode parmi d'autre peut consister à split() chaque ligne pour récupérer les valeurs, qu'il faut ensuite convertir avec int() (ou float())

    si on veut dérouler un peu plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    l = []
    with open('matrix') as f:
       for row in f:
          temp = []
          for val in row.split():
             temp.append(int(val))
          l.append(temp)
    ou encore pour reprendre le fonctionnement du code donné précédemment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    l = []
    with open('matrix') as f:
       for row in matrix:
          l.append(map(int, row.split()))

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    D'accord merci !

    Donc si je comprends bien là avec ce programme je vais donc ouvrir le fichier matrix dans une variable f et après je parcours f par ligne. Val prend successivement les valeurs de la ligne (car on découpe) et après je remplis temp avec la valeur à chaque fois.
    Quand j'ai fini la ligne la liste se stocke dans une autre liste et je recommence l'opération. C'est bien ça ?

  11. #11
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par wolfman47 Voir le message
    Donc si je comprends bien là avec ce programme je vais donc ouvrir le fichier matrix dans une variable f et après je parcours f par ligne. Val prend successivement les valeurs de la ligne (car on découpe) et après je remplis temp avec la valeur à chaque fois.
    Quand j'ai fini la ligne la liste se stocke dans une autre liste et je recommence l'opération. C'est bien ça ?
    oui, faut penser "listes" en python, c'est vraiment une des structures de base, la fonction map() renvoie une liste également

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Maintenant si je veux faire l'inverse, c'est-à-dire prendre une liste et renvoyer une matrice, j'ai juste à faire une boucle for sur la liste de listes et stocker dans une matrice. Mais comment je sais combien de listes sont dans la liste de listes afin de mettre une condition à la boucle for ?

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    autant pour moi je m'étais trompé en tapant mon code .... C'est len pour le nombre d'éléments d'une liste et non length ....

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Je n'arrive pas à faire l'inverse ....

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    def print_list(l,fichier):
    mat = [[]]
    #boucle for ou while je ne sais pas encore laquelle est la plus facile à manipuler ici mais en tout cas on a un i qui nous permet de nous balader dans la liste de listes 
    while i < range(len(l)):
    mat[i] = [l[i]]
    #j'ai un problème d'index ici 
    i = i+1
    #et je dois écrire le résultat dans un fichier 
    fichier_cree = open(fichier, "w")
    fichier.write(print mat)

  15. #15
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    ouai.. je te confirme qu'il faudrait que tu retournes faire un passage sur les tutos quand même, au delà de la logique du programme ici c'est vraiment les rudiments de Python qu'il te manque
    par ailleurs, j'imagine que ça n'est pas pour un exercice à faire

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Ce n'est vraiment pas pour un exercice mais pour une série de connaissances basiques sur python que je dois acquérir le plus vite possible. Le problème étant que je dois me confronter à l'apprentissage de 6 langages actuellement et donc je ne sais pas où donner de la tête au niveau écriture d'un programme lorsque je bascule d'un langage à l'autre.

    Peux-tu m'expliquer rapidement ce dernier problème ou m'indiquer quelle connaissance spécifique je dois voir dans les tutos et cours ?

    Si tu ne veux pas, ce n'est pas le problème, je te remercie déjà pour ton aide.

  17. #17
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    Citation Envoyé par wolfman47 Voir le message
    Ce n'est vraiment pas pour un exercice mais pour une série de connaissances basiques sur python que je dois acquérir le plus vite possible.
    au delà de Python, c'est la compréhension des structures de programmation en général qu'il te manque, les boucles for et while sont communes à la grande majorité des langages, ne pas savoir les utiliser dans 1 langage c'est ne savoir les utiliser dans aucun langage


    Le problème étant que je dois me confronter à l'apprentissage de 6 langages actuellement
    en voilà une idée qu'elle est toute pourrie, c'est la technique idéale pour ne rien apprendre du tout, déjà pour un programmeur expérimenté ça serait un coup à se faire des noeuds à la tête alors pour un débutant j'imagine même pas
    tu aurais meilleur compte de te focaliser sur un langage en particulier pour commencer, apprendre à l'utiliser de manière un peu fluide pour des choses de bases (opérations sur les fichiers, connexions réseaux, affichages formatés, manipulation des structures de données, filtrage/transformation de données etc.), au delà de la syntaxe spécifique à chaque langage il y a une logique commune à tous les langages, il convient de la maitriser, par la suite apprendre d'autres langage n'en sera que plus simple

    Peux-tu m'expliquer rapidement ce dernier problème ou m'indiquer quelle connaissance spécifique je dois voir dans les tutos et cours ?
    comme dit plus haut, c'est pas simple à expliquer, mais typiquement :
    Citation Envoyé par wolfman47 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fichier_cree = open(fichier, "w")
    fichier.write(print mat)
    dans absolument aucun langage tu ne verras ce genre de tournure, open() est une fonction, une fonction prend des paramètres en arguments (donc à l'intérieur des parenthèses) et retourne un truc (ici un descripteur de fichier), même pour quelqu'un qui ne connaitrait pas Python il est évident que dans fichier_cree = open(fichier, "w") c'est fichier_cree qui contient le descripteur servant à référencer le fichier, alors que fichier est une variable qui contient le nom du fichier à ouvrir, du coup écrire fichier.write() est une hérésie

    donc là clairement on est sur des connaissances en programmation très généralistes, ce que tu veux faire ensuite (lire un tableau depuis un fichier par le biais de boucles imbriquées, et son traitement inverse) c'est le cran juste au dessus, c'est de l'algorithmique

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    J'ai fait les tutoriels proposé sur ce site et maintenant je pense que je dois pouvoir mieux comprendre.

    Pour parcourir la liste de listes je peux simplement dire for i in list_of_lists: si je comprends bien.
    Ensuite pour ce qui est de la création et de l'écriture dans un fichier c'est bon j'ai pigé.

    Maintenant, c'est au niveau de la création de la matrice durant le for. Je ne vois pas trop comment la faire (array pourrait être une solution peut-être mais j'ai des erreurs lors de l'utilisation).

  19. #19
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    Finalement j'ai réussi à créer ma matrice. Mais je ne l'ai pas encore stockée dans un fichier, dois-je stocker les valeurs au fur et à mesure dedans où est-ce possible de le faire à la fin ?

  20. #20
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    tu peux écrire chaque valeur indépendamment, entre chaque valeur il faut mettre un espace (à priori) et à chaque ligne il faut mettre un retour à la ligne \n

    ou plus efficace et plus simple tu peux faire une boucle pour écrire chaque ligne, et utiliser la méthode .join() pour écrire toutes les valeurs de la ligne d'un seul coup, ça fait partie des fonctions de base donc j'imagine que tu peux trouver des exemples dans les mêmes tutos

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Demande d'aide : Manipulation de matrice en Assembleur
    Par Lozzy091 dans le forum Assembleur
    Réponses: 1
    Dernier message: 21/05/2013, 19h22
  2. Réponses: 0
    Dernier message: 09/03/2012, 18h38
  3. Regrouper une liste en liste de listes
    Par West01 dans le forum Prolog
    Réponses: 12
    Dernier message: 14/03/2008, 14h07
  4. Fonctions manipulant des matrices
    Par panda31 dans le forum C
    Réponses: 24
    Dernier message: 14/06/2006, 10h28
  5. Manipulation de matrices.
    Par TeKa dans le forum C
    Réponses: 28
    Dernier message: 16/11/2005, 15h53

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