matrice carrée de taille n (variable). Après transformation, cette matrice peut contenir des lignes (ou colonnes) avec que des zéros. Il faut virer ces lignes.
Je sais tester un élément, l[i][j] ==0 mais je ne sais pas tester une ligne " l[i]==0" c'est toujours false me semble. l[i]==[0,0,0] pas possible car la matrice change de dimensions en fonction du besoins.
Comme tu sembles débuter, je ne te donnerai pas de trucs avancés. Il faut tester les éléments un à un de chaque ligne ou chaque colonne et compter le nombre de valeurs nulles. Si le nombre d'élément nuls est égal au nombretotal d'éléments dans la ligne ou la colonne, on peut l'éliminer. Mais, attention, en faisant cela, on risque de fausser l'indexation et avoir un erreur de type IndexError. On doit le faire à partir de la fin vers le début. Exemple: - nl = ... # Nombre de lignes. nc = ... # Nombre de colonnes. # Effacer une ligne vide. for l in range(nl-1, -1, -1): # On parcours les lignes en partant de la fin. z = 0 for c in range(nc): # Ici, la direction est sans importance. if matrice[l][c] == 0: z += 1 if z == nc: del(matrice[l]) # On efface toute la ligne d'un seul coup. # Effacer une colonne vide. for c in range(nc-1, -1, -1): # Encore à l'envers. z = 0 for l in range(nl): if matrice[l][c] == 0: z += 1 if z == nl: for l in range(nl): # Ici, on doit effacer un élément à la fois. del(matrice[l][c])
Le Tout est souvent plus grand que la somme de ses parties.
J'ai bien dit que je ne donnais pas de truc avancé. C'est assez simple quand il s'agit de lignes, mais c'est moins évident quand il s'agit de colonnes.
Est-ce que JouryMsaken connait les compréhensions ou le slicing?
Quoi faire quand plus d'une colonne est nulle?
Petit essai: L = [l for l in range(nl) if all(M[l][c]==0 for c in range(nc))] C = [c for c in range(nc) if all(M[l][c]==0 for l in range(nl))] M = [[M[l][c] for c in range(nc) if c not in C] for l in range(nl) if l not in L]
- Edité par PierrotLeFou 8 juin 2024 à 19:22:12
Le Tout est souvent plus grand que la somme de ses parties.
Est-ce que JouryMsaken connait les compréhensions ou le slicing?
oui je connais les deux mais comme tu l'as bien dit, "je ne suis pas un as". Ce que m'a gêné c'est de tester un ensemble et pas un élément.
L'idée de la "somme" (à laquelle je n'ai pas pensé) et "all" ( que je ne maitrise pas découvert pas longtemps) me paraient facile à appliquer et efficace. le reste (zip, map, any,...) il faut que je teste et que je lis la doc
M = [[1, 2, 0, 3], [0, 0, 0, 0], [4, 5, 0, 6],[7, 8, 0, 9]] M = [list(L) for L in zip(*[C for C in zip(*M) if any(C)]) if any(L)] print(M)
-
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- Edité par PierrotLeFou 12 juin 2024 à 1:32:43
Le Tout est souvent plus grand que la somme de ses parties.
Comment supprimer ligne(s) ou colonne(s) matrice
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Python c'est bon, mangez-en.
Le Tout est souvent plus grand que la somme de ses parties.