Bonjour à tous j'aurais besoins de votre aide pour réorganiser un tableau en python.
J'ai un tableau D comme ceci :


D = ['abc', 'def', 'ghi'];


Et j'aimerais réorganiser mon tableau pour que le D[0] soit égal au premier caractère de D[0], D[1] et D[2]. Par exemple, après la réorganisation, mon tableau pour l'exemple dessus ressemblerais à ça :


D = ['adg', 'beh', 'cfi'];


Merci beaucoup (:
Modifié par vzytoi (04 Nov 2020 - 11:20)
Modérateur
Bonjour,

Et c'est dur, ça ? Smiley cligne Tu me surprends car vu tes postes précédents tu me semblais avec du niveau !

1) y a des ";" maintenant en python Smiley cligne

2) il est prudent d'utiliser une deuxième liste

E=[D[0][0]+D[1][0]+D[2][0],D[0][1]+D[1][1]+D[2][1],D[0][2]+D[1][2]+D[2][2]]
D=E

Amicalement,
parsimonhi a écrit :
Bonjour,

Et c'est dur, ça ? Smiley cligne Tu me surprends car vu tes postes précédents tu me semblais avec du niveau !

1) y a des ";" maintenant en python Smiley cligne

2) il est prudent d'utiliser une deuxième liste

E=[D[0][0]+D[1][0]+D[2][0],D[0][1]+D[1][1]+D[2][1],D[0][2]+D[1][2]+D[2][2]]
D=E

Amicalement,


Merci beaucoup de ta répondre ( effectivement pour les point virgules ... )
Le problème est que le tableau D à n'a que 3 élément composé de 3 caractère seulement pour mon exemple, en réalité, ces deux valeurs sont des variables ...
Je pense que le mieux c'est de montrer tout mon code, le voila :


n = int(input())
d = int(input())
D = []

for j in range(n) :
    l = input(f"{j + 1} : ")
    if len(l) > d :
        l = input(f"{j + 1} : ")
    else :
        D.append(l)


Modifié par vzytoi (04 Nov 2020 - 11:44)
Modérateur
Bonjour,

Je n'y comprends rien.

1) Il est censé faire quoi, le f dans les inputs ? (EDIT: ok, je retire la question, j'avais testé avec un python trop vieux)

2) C'est quoi le but du code ? (EDIT2: je retire aussi cette question, j'ai fini par comprendre; dès fois je me dis que je ferais mieux de tout arrêter tellement je suis sénile)

Amicalement,
Modifié par parsimonhi (04 Nov 2020 - 13:22)
Modérateur
Bonjour,

Un code qui fait peut-être ce que tu veux. Mais il me semble que ce que tu veux faire ne peut fonctionner que si le nombre d'employés est le même que celui du nombre de dents. Il doit donc manquer quelque chose à l'énoncé.

n = int(input("Nombre d'employés : "))
d = int(input("Nombre de dents : "))
D = []

for j in range(n) :
    l = input(f"Ligne {j + 1} : ")
    if len(l) > d :
        l = input(f"Ligne {j + 1} bis: ")
    else :
        D.append(l)

D2 = []
for j in range(n) :
    D2.append("")
    for k in range(d) :
        D2[j] = D2[j]+D[k][j]

D=D2
print(D)


Voici une variante qui marche avec un nombre d'employés différent de celui du nombre de dents. Mais dans ce cas, le résultat D n'a pas le même nombre d'éléments que le D initial.
n = int(input("Nombre d'employés : "))
d = int(input("Nombre de dents : "))
D = []

for j in range(n) :
    l = input(f"Ligne {j + 1} : ")
    if len(l) > d :
        l = input(f"Ligne {j + 1} bis: ")
    else :
        D.append(l)

D2 = []
for k in range(d) :
    D2.append("")
    for j in range(n) :
        D2[k] = D2[k]+D[j][k]

D=D2
print(D)


Amicalement,
Modifié par parsimonhi (04 Nov 2020 - 13:41)
Meilleure solution
Salut et merci encore pour ton temps.
Le premier code retourne une erreur mais le deuxième est parfait !
Bonne après-midi
Modérateur
Et l'eau,

Je viens après la bataille. J'ai testé ce bout de script et j'ai une levée d'exception : IndexError: list index out of range. Aussi, j'ai pas saisi le but de ce script.

Ma version de python est 3.6.10

@parsimonhi: les ";" sont acceptés. Cependant, il faut éviter de les utiliser il me semble afin de garder une lisibilité optimale. les ";" servent surtout à indiquer 2 instructions sur la même ligne.
Modérateur
Bonjour,

niuxe a écrit :

Je viens après la bataille. J'ai testé ce bout de script et j'ai une levée d'exception : IndexError: list index out of range. Aussi, j'ai pas saisi le but de ce script.


J'avais bien signalé, pour ma 1re version que ça ne marchait que si on avait le même nombre d'employés et le même nombre de dents. Je pensais à ce moment là que la liste de résultat devait avoir le même nombre d'éléments que la liste d'origine (et du coup, quand on a un nombre d'employés différent du nombre de dents, bah, forcément, on part en erreur "out of range").

Et c'est pour ça que j'ai fait une 2e version, où la liste change de nombre d'éléments en cours de route : il s'avère que ce n'est pas un problème du point de vue des spécifications et que c'est finalement la bonne solution.

Amicalement,
Modérateur
En testant les 2 scripts de cette réponse, j'ai la même erreur : IndexError: list index out of range

mes paramètres sont : 3 et 2 ou 3 et 3 ou 2 et 3

@vzytoi : pourquoi n'essaies tu pas de faire un trie de caractères dans chaque item de ton tableau ou soit faire un trie globale et redispatcher de la même structure de ton tableau ?
Modérateur
Bonjour,
niuxe a écrit :
En testant les 2 scripts de cette réponse, j'ai la même erreur : IndexError: list index out of range

mes paramètres sont : 3 et 2 ou 3 et 3 ou 2 et 3

Il faut rentrer des chaines de longueur appropriées aussi (leur longueur doit être égale au 2e nombre).

Amicalement,