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 :

Déclaration et gestion tableaux


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 40
    Par défaut Déclaration et gestion tableaux
    Bonjour,

    Je rencontre un petit problème :
    A l'intérieur d'une fonction, je voudrais remplir un tableaux de N flottants à l'aide d'un certain algorithme.
    N est une valeur entiére passée en paramétre d'entré de la fonction.
    Le tableau lui meme est renvoyé par la fonction.

    Soit y le tableau en question. J'ai été voir dans différents tutoriels et il m'a semblé que l'on déclarait ce tableau par l'instruction y[].
    Voici alors le début du code posant problème (à l'intérieur de la fonction):[/I]

    y=[]
    h=(borne-x0)/N
    y[0]=y0

    for i in range (1,N-1) :
    y[i]=y[i-1]+h*phi(y[i-1]) etc...


    Lors de l'execution, j'obtient le message suivant :
    "... y[0]=y0
    IndexError: list assignment index out of range"

    qui semble m'indiquer que je déborde la dimension du tableau dés l'instruction y[0]=y0.
    Quelle doit-etre la bonne syntaxe pour définir un tableau de taille N et le remplir de 0 à N-1 svp ?
    Par avance merci

    jcmic

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur-Chercheur
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur-Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Par défaut
    Bonjour,

    Le message est explicite.
    Quand vous faites y[0] = y0, cela suppose que votre liste y est de dimension 1 (les indices commençant à 0). Or votre liste est de dimension 0.
    pour vous en convaincre !.

    Pour résoudre votre problème, soit vous dimensionnez votre liste (tableau) directement à la dimension N dès le début (car la valeur est connue), soit vous ajouter à votre liste (tableau) les valeurs au fur et à que vous les calculez.

    Pour la première solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    h=(borne-x0)/N
    y=[ y0 for i in range(N) ]
    for i in xrange(1,N) :
     y[i]=y[i-1]+h*phi(y[i-1])
    Pour la seconde solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    h=(borne-x0)/N
    y = [ y0 ]
    for i in xrange(1,N) :
     y.append( y[-1] + h*phi(y[-1]) )
    Il y a sûrement des améliorations à ce que je vous propose (en une ligne ou presque ?) et/ou d'autres solutions.

    Cordialement,

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 40
    Par défaut
    Ok, merci pour votre réponse claire.
    Ce qui me manquait, relativement à la premiére solution, c'était effectivement la syntaxe pour dimensionner le tableau avant de le gérer.
    Merci encore

    Cordialement

    jcmic

  4. #4
    Membre Expert

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Par défaut
    Deux petites remarques*:

    *D’une part, il beaucoup plus rapide de définir tout de suite le tableau à sa taille finale, si celle-ci est connue, plutôt que de rajouter les éléments un à un (on gagne déjà la moitié du temps avec la méthode proposée ci-dessus, avec py 2.6)*!

    *D’autre part, il est beaucoup plus rapide d’utiliser y = [y0]*N plutôt qu’une liste comprehension (y = [y0 for i in range(N)]), ici*(plus de dix fois plus, toujours en py 2.6)*!

    Notez que py3, bien que globalement environ 25% plus rapide, conserve les mêmes ordres de grandeur…

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

    Python vient avec une bibliothèque array qui est probablement plus efficace pour gérer les types de base que les listes.

    Doug Hellman a fait il y a longtemps un PyMOTW là dessus. Il y montre comment çà s'utilise.

    Nous avons aussi les "array" de numpy mais c'est autre chose.

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

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 40
    Par défaut
    Merci, effectivement cette solution parait intéressante
    Cordialement

Discussions similaires

  1. Déclaration d'un tableaux (vecteur)
    Par 3abirb dans le forum Images
    Réponses: 1
    Dernier message: 16/02/2013, 13h06
  2. [Tableaux] Déclaration d'un tableau à 2 dimensions
    Par kcizth dans le forum Langage
    Réponses: 5
    Dernier message: 04/01/2006, 15h35
  3. Réponses: 9
    Dernier message: 09/11/2005, 11h53
  4. [Tableaux] gestion des connexions
    Par zahiton dans le forum Langage
    Réponses: 3
    Dernier message: 02/11/2005, 14h37

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