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

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2020
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2020
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Matrice, décalage de colonne dans une liste de liste - PYTHON
    Bonjour, j'ai une question par rapport à une matrice

    qui est sous cette forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    res = []
        for i in range(nb_lignes):
            liste = []
            for j in range(nb_colonnes):
                liste.append(valeur_par_defaut)
            res.append(liste)
        return res
    ca donne quelque chose comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [[0, 1, 2],
      [3, 4, 5],
      [6, 7, 8]]
    et le but de l'exercice est de faire la fonction ci dessous (décalage_colonne_en_haut) , c'est a dire de décaler une colonne en récupérant le nombre qui est enlevé et rajouter une nouvelle valeur (par ex: 9) en bas de la colonne.

    Donc la matrice
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [[0, 1, 2], 
     [3, 4, 5],
     [6, 7, 8]]
    en insérant une nouvelle valeur 9 a la colonne 1 doit donner ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                            [[0, 4, 2], 
                             [3, 7, 5],
                             [6, 9, 8]]
    en retournant a la fin de la fonction la valeur qui a été enlevé ici c'est le nombre 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def decalage_colonne_en_haut(matrice, num_colonne, nouvelle_valeur=0):
        """
        decale la colonne num_colonne d'une case vers le haut en insérant une nouvelle
        valeur pour remplacer la premiere case en bas de cette ligne
     
        :param matrice: la matrice considérée
        :param num_colonne: le numéro de la ligne à décaler
        :param nouvelle_valeur: la valeur à placer
        :return: la valeur qui a été ejectée lors du décalage
        """
    J'ai fait quelque chose comme ca mais ca ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        retire avec .pop le premiere element colonne et rajouter a la derniere ligne la new val a la colonne
        nb_retire = matrice[0].pop(num_colonne)
        matrice[-1].append(nouvelle_valeur)
        return nb_retire
    Ou aussi j'ai fait ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        for i in range(len(matrice)-1):
            nb_ret = matrice[0][num_colonne]
            matrice[i].pop(num_colonne)
            matrice[i].insert(num_colonne,matrice[i+1][num_colonne])
        matrice[-1][num_colonne] = nouvelle_valeur
     
        return nb_ret
    JE vous remercie de votre aide, certaines personnes m'on parlé de boucle imbriquée mais si vous avez une solution plus simple je suis preneur.

    Merci

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    juin 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : juin 2018
    Messages : 27
    Points : 51
    Points
    51
    Par défaut
    La dernière proposition me semble pertinente et fonctionnelle

    Une première remarque d'ordre esthétique (et lisibilité) : les deux lignes (pop et insert) pourraient être remplacées par un simple assignement ( = )

    Deuxièmement, je suppose que le problème est que la fonction retourne une mauvaise valeur.
    Que contient matrice[0] à chaque itération? Par conséquent que contient nb_ret en sortie de boucle?

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    juin 2008
    Messages
    17 544
    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 : 17 544
    Points : 30 269
    Points
    30 269
    Par défaut
    Salut,

    La mécanique de base est simple: on remplace le ième élément de quelque chose par son i+1ième élément:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> L = [ 1, 2, 3 ]
    >>> for i in range(len(L) - 1):
    ...     L[i] = L[i+1]
    ...
    >>> L
    [2, 3, 3]
    Après sauvegarder le premier élément qu'on va retourner et remplacer le dernier élément sont des "décorations" ajoutées à cette base là.

    De même, plusieurs dimensions, c'est juste changer un peu l'adressage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> for i in range(len(L) - 1):
    ...     L[i][j] = L[i+1][j]
    ...
    avec un "j" (n° de colonne) "fixe".

    Essayez d'être cohérent avec les représentations. Une liste a un nombre de case qui peut changer "dynamiquement" (on en ajoute et on en détruit quand on veut). Un tableau a une longueur "fixe" et si vous utilisez une liste pour le représenter (parce que c'est "pratique"), ce n'est plus tout à fait une liste (et çà évite de se prendre les pieds dans le tapis).

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

Discussions similaires

  1. décalage des colonnes dans une matrice et remplissage
    Par FATENMRABET dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 06/10/2013, 15h16
  2. Réponses: 4
    Dernier message: 21/02/2008, 16h44
  3. Réponses: 6
    Dernier message: 14/06/2007, 08h46
  4. Réponses: 2
    Dernier message: 10/04/2007, 11h58
  5. [C++ 6.0] : Cacher une colonne dans une liste
    Par Mirna dans le forum MFC
    Réponses: 1
    Dernier message: 08/02/2007, 19h31

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