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 :

Mettre un valeur dans un tableau � 2 dimensions


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Novembre 2019
    Messages
    16
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 16
    Par d�faut Mettre un valeur dans un tableau � 2 dimensions
    Bonjour/ bonsoir,
    Je suis en train de faire un programme dans lequel j'ai besoin de mettre une valeur dans un tableau 2D remplis de None.
    L� comme d'habitude je met tab[y][x] = val dans ma fonction. Sauf que �a n'a pas march�. Au lieu d'avoir la valeur seulement en x, y je l'ai dans tous les sous tableaux (je sais pas si on appelle �a comme �a) en x

    Pour faire plus visuel, avec les x = 0 et y = 1, je voulais :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [[None, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None],
    [None, None, None, None, None, None, None, None, None]]
    Mais a la place j'ai :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [[1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None],
    [1, None, None, None, None, None, None, None, None]]
    Voici mon code :
    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
    def gobanList(taille) :
        gobanListe = [[None]*taille]*taille
        return gobanListe
     
     
    def correspondance(mode, x, y, plateau, symbole):
        if mode == 9:
            xCoord = int(x / 40)
            yCoord = int(y / 40)
            print(xCoord,yCoord)
            plateau[yCoord][xCoord] = symbole
            print(plateau)
     
    plateau = gobanList(9)
    correspondance(9, 0, 40, plateau, 0)
    Voila voila, merci d'avance je sens d�j� que la r�ponse va �tre tr�s simple mais je n'arrive pas a comprendre ce qui ne va pas

  2. #2
    Membre �prouv�
    Inscrit en
    Juillet 2013
    Messages
    80
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 80
    Par d�faut
    Hello,

    Euh je n'ai pas lu le code mais cela me semble bien compliqu� par rapport � votre besoin... what about this ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    # Array of array generator
    nrows, ncols=10,10
    m = [[None for i in range(ncols)] for i in range(nrows)]
     
    # Modifying an item
    row, col = 1,0 # Coordinates to modify
    m[row][col]=1
    Remarquez que j'ai mis rows, cols, nrows, ncols pour plus de lisibilit�, mais vous pouvez encore r�duire ce code � deux lignes uniquement

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

    Le soucis est � la ligne 2:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
             gobanListe = [[None]*taille]*taille
    La liste interne ([None]*taille) fonctionne normalement.
    Mais cette liste l� * taille, c'est une copie de la m�me liste.

    Pour que ce soient des listes diff�rentes, il faut cr�er chaque sous liste et l'ajouter au tableau (voir le code de charliemtx).

    Maintenant, un tableau � deux dimensions, c'est un tableau � une dimension o� les �l�ments sont acc�d�s via un couple (i, j).
    Mais derri�re, rien ne vous emp�che de calculer k = i * M + j du tableau 1D correspondant.

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

  4. #4
    Membre averti
    Homme Profil pro
    �tudiant
    Inscrit en
    Novembre 2019
    Messages
    16
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 16
    Par d�faut
    Merci de votre r�ponse !
    Je pensais que le *taille allez faire une copie du la 1�re taille fois mais qu'elles serait ind�pendantes par la suite.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    F�vrier 2006
    Messages
    12 848
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 12 848
    Billets dans le blog
    1
    Par d�faut
    Bonjour
    Citation Envoy� par Gal.o.u Voir le message
    Je pensais que le *taille allez faire une copie du la 1�re taille fois mais qu'elles serait ind�pendantes par la suite.
    H� non, Python fonctionne � l'�conomie. Ecrire x=y avec "y" tableau ne donnera pas deux tableaux mais deux r�f�rences au m�me tableau m�moire. Parce que d'une part c'est plus rapide de copier une r�f�rence que le contenu d'un tableau tout entier et que d'autre part, dans 90% des cas, cela suffit. Mais (revers de la m�daille) toute modification dans "x" se r�percute dans "y" puisqu'en r�alit� "x" et "y" ne sont qu'un seul et m�me tableau.
    Et pour les cas o� il faut deux tableaux distincts, Python offre des syntaxes assez souples pour copier facilement le premier dans le second (exemple x=list(y), x=y[:], x=[i for i in y]) ou, comme ici, cr�er facilement diff�rents sous-tableaux.
    Mon Tutoriel sur la programmation �Python�
    Mon Tutoriel sur la programmation �Shell�
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les diff�rentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 770
    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 770
    Par d�faut
    Citation Envoy� par Gal.o.u Voir le message
    Je pensais que le *taille allez faire une copie du la 1�re taille fois mais qu'elles serait ind�pendantes par la suite.
    Python est un langage bizarre: des r�f�rences d'un c�t� et les objets associ�s de l'autre.

    L = [None]*taille copie lui aussi des r�f�rences mais L[i] =... assigne un nouvel objet � la ii�me position de la liste.
    Alors que L[i][j] modifie le ji�me �l�ment de la i�me liste.... et toutes les entr�es de L.

    Difficile de s'en sortir sans cr�er une nouvelle liste � chaque it�ration (sans *).

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

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [PHP 7] extraire une valeur dans un tableau � 2 dimensions
    Par laurentSc dans le forum Langage
    R�ponses: 3
    Dernier message: 30/03/2020, 07h07
  2. R�ponses: 3
    Dernier message: 07/11/2019, 09h31
  3. [XL-2016] Macro pour mettre � jour valeurs dans un tableau
    Par forestlaw dans le forum Macros et VBA Excel
    R�ponses: 4
    Dernier message: 04/05/2018, 21h30
  4. mettre les valeurs dans une tableau
    Par monphp dans le forum VB.NET
    R�ponses: 1
    Dernier message: 01/06/2007, 16h51
  5. R�ponses: 9
    Dernier message: 05/01/2007, 20h04

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