TypeError: list indices must be integers

Bonjour à tous,
Si je veux extraire la une colonne ou une ligne de la matrice formée par le code suivant (via X[1,:] par exemple) , j'obtiens le message d'erreur TypeError: list indices must be integers or slices, not tuple.
Je ne comprends pas où est le problème....

Merci d'avance
def matrice_al(n,p):
    X = [[0 for i in range(n)] for j in range(n)]

    for k in range(n):
        for j in range(n):
            if random.random()<p:
                X[k][j] = random.random()
    return X

Réponses

  • Bonjour ,
    je n'ai pas de message d'erreur . Voir peut-être les paramètres d'appel de la fonction .
    import random
    
    def matrice_al(n,p):
        X = [[0 for i in range(n)] for j in range(n)]
    
        for k in range(n):
            for j in range(n):
                if random.random()<p:
                    X[k][j] = random.random()
        return X
    
    u = matrice_al (5,7)
    print (u)
    
  • Bonjour,
    merci de votre réponse.

    Ah c'est étrange ...

    et si vous extrayez une ligne ou une colonne, ça ne vous dit rien non plus ?
  • Le X renvoyé n'est pas une matrice, mais une liste de listes.
    Tu ne peux utiliser le "slicing par étage" que sur un tableau numpy ou l'un de ses dérivés (par exemple, le type "matrix").

    Sinon, tu peux écrire
    X[1][:]
    
    ou simplement
    X[1]
    
    pour avoir la première ligne, mais pour avoir la première colonne, pas d'autre choix que d'écrire quelque chose comme
    [X[ i][1] for i in range(n)]
    
    Dernière chose : il y a une fonction dans "numpy" qui renvoie directement un tableau aléatoire numpy dont les coefficients prennent des valeurs uniformément et indépendamment choisies dans [0,1], c'est "numpy.random.rand(d1, d2, ..., dn)" où d1, d2, ..., dn sont les n dimensions du tableau n-dimensionnel.
  • merci ! c'est donc ça mon erreur, je comprends mieux maintenant !
Connectez-vous ou Inscrivez-vous pour répondre.