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 :

problème index liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 299
    Par défaut problème index liste
    Bonjour,

    je refais du python après une longue pose de 3 ans. J'aimerai vider une liste pour ensuite la réemplir mais j'ai un problème d'index.

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    source = open("low_coverage_regions_Bilbao3_2_hg19.txt", "r")
    dict={}
    list=[]
    chrs="1"
    ligne=1
    try:
      for line in source:
        if ligne!=1:
          donnee=line.rstrip('\n\r')
          tab=donnee.split("\t")
     
          if tab[0] == chrs:
    	print str(chrs)+"  "+tab[1]
    	list.append(tab[1])
     
          else:
    	dict[chrs]=list
    	chrs=int(chrs)+1
    	del(list[:])
    	list.append(tab[1])#erreur à ce niveau
        else:
          ligne+=1
     
     
    finally:
      source.close()
    J'aimerai tout d'abord comprendre pourquoi et ensuite comment faire?

    Merci d'avance

    Alaninho

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Bonjour,

    Plusieurs petites choses

    Ne pas utiliser de mot clé pour vos variables ( je pense à list ici )

    J'aimerai vider une liste pour ensuite la réemplir
    Le plus simple est de contrôler si la liste est pleine, tant qu'elle l'est on continue le traitement, cependant attention aux boucles infinies, il faut savoir ce qu'on fait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> liste = [12, 5, 8, 9]
    >>> while liste:
    ...     liste.pop()
    ... 
    9
    8
    5
    12
    >>> liste
    []
    Bonne continuation...

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Et pourquoi pas: liste=[] ?

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Salut Tyrtamos,

    Cette question m'est destinée?

    Si oui, vider la liste a juste un intérêt si on utilise et supprime les items de la liste, sinon si les items n'ont pas d'utilisation prédestinée, écraser simplement est suffisant.

    Il faut dire que la démarche, n'est pas très claire, si on pouvait en savoir plus sur l'objectif final, on donnerait sans doute une réponse moins évasive.

  5. #5
    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
    @ alaninho*: Ton code présente d’autres problèmes, outre celui soulevé par fred (ne pas utiliser de mots clés pour une variable).

    * chrs=int(chrs)+1 transforme chrs en int, il faudrait faire chrs = str(int(chrs) + 1). Ceci dit, si tu utilises un dict avec des clés de type "1", "2", "3", "4", etc., pourquoi ne pas plutôt utiliser une liste de listes*?

    * Plus “grave”, faire*:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> l = [1, 2, 3]
    >>> d = {"1": l}
    >>> d
    {'1': [1, 2, 3]}
    >>> del l[:]  # del est un mot clé, pas une fonction, pas besoin de parenthèses ;)
    >>> d
    {'1': []}
    Eh oui, les types complexes comme les listes sont toujours assignés par référence, donc vider la liste vide également le contenu du dict*! Dans ce cas, il suffit de réassigner une nouvelle liste vide à l*:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> l = [1, 2, 3]
    >>> d = {"1": l}
    >>> d
    {'1': [1, 2, 3]}
    >>> l = []
    >>> d
    {'1': [1, 2, 3]}
    @ fred*:
    Si oui, vider la liste a juste un intérêt si on utilise et supprime les items de la liste, sinon si les items n'ont pas d'utilisation prédestinée, écraser simplement est suffisant.
    Ce n’est pas toujours vrai, surtout lorsqu’on travaille sur de grosses listes et/ou énormément de listes… del l[:] permet de vider la liste, mais de la réutiliser, sans avoir à supprimer un objet liste pour en ré-assigner un autre… Avec une liste d’un million de listes à purger et ré-utiliser, ça peut faire une différence*!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> import timeit
    >>> timeit.repeat("for i in range(len(l)): l[i] = []", "l = [[i for i in range(100)]] * 10000000", number=1)
    [1.3527190685272217, 1.136795997619629, 1.107806921005249]
    >>> timeit.repeat("for i in range(len(l)): del l[i][:]", "l = [[i for i in range(100)]] * 10000000", number=1)
    [0.9231569766998291, 0.9269649982452393, 1.0076191425323486]
    # Sans compter qu’avec la deuxième ligne, on peut utiliser la forme d’itération classique*:
    >>> timeit.repeat("for e in l: del e[:]", "l = [[i for i in range(100)]] * 10000000", number=1)
    [0.4924631118774414, 0.4796111583709717, 0.48940205574035645]
    Soit environ 10% plus rapide (et ça ne prend pas en compte le boulot du GC, mais je doute que ça change grand chose, en fait)… Mais bon, on sort un peu (beaucoup) du cadre de la question du PO, là…

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 299
    Par défaut
    Juste pour vous dire que j'ai plu d'erreur et j'ai pris en compte vos remarques donc merci. J'ai pas mal le code et j'ai fais autres choses donc poster la solution ne sert à rien je pense. Merci encore.

  7. #7
    Invité de passage
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1
    Par défaut proble d'index
    bonjour j'espere que c'est j'ai posé ma question la ou il faut car je suis new dans cet forum.
    ma question est j'ai un fichier csv qui contient mes données avec deux colonnes et lorsque je veux les recuperer pour tracer une courbe , j'ai cette erreur:list index out of range
    je ne sais pas pourquoi car avec le même style de donné sur un autre fichier CSV, mon programme marche.
    voici mon code:
    fichier=open('/home/mame/Bureau/resultat_fourmi1/analyse/correlation/p0/max/new2.csv','rb')
    fichiercsv=csv.reader(fichier,delimiter=' ')

    nb_echantillons=range(975)

    Emes = []

    Ecal = []
    for ligne in fichiercsv:
    Emes.append(ligne[0])
    Ecal.append(ligne[1])


    n1_E_mes = numpy.array(Emes)

    n1_E_cal = numpy.array(Ecal)



    n1nb_echantillons= numpy.array(nb_echantillons)




    ion()

    plot(n1nb_echantillons,n1_E_mes)

    merci de m'aider

  8. #8
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Par défaut
    erreur:list index out of range
    ce message signifie que ta liste n'a pas assez d'éléments. Pour ton cas, tu n'as pas mis la ligne concernée par cette erreur mais je pense que c'est au niveau des lignes (ou d'une seul) de ta boucle for: ta liste es t donc soit vide si erreur pour les 2 soit ne contient qu'1 seul élément

    ça provient surement de ta fonction de split car ton délimiteur est ' ' (vide). si tu as un vrai csv avec délimiteur ';' ta fonction serait donc plutôt (le séparateur est peut être aussi plutôt une tabulation qu'1 espace)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichiercsv=csv.reader(fichier,delimiter=',')
    PS: Essaie de mettre ton code entre balise "Code" car sinon on ne peut pas voir d'éventuel problème d'indentation, et c'est beaucoup moins lisible
    PS2: tu aurais plutôt dû ouvrir une autre discussion car là le sujet est marqué résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Problème index liste déroulante à deux colonnes
    Par Mut dans le forum VBA Access
    Réponses: 7
    Dernier message: 30/09/2010, 11h45
  2. Problème de liste déroulante et js...
    Par Empty_body dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/03/2006, 10h44
  3. [MySQL] Problème de listes déroulantes liées avec requêtes sql
    Par richton95 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/12/2005, 16h04
  4. Problème avec liste déroulante
    Par Invité dans le forum IHM
    Réponses: 2
    Dernier message: 14/12/2005, 21h04
  5. Problème avec listes liées entre elles et bouton "précé
    Par Oluha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/08/2005, 15h10

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