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 :

Créer des listes grâce à une boucle


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Créer des listes grâce à une boucle
    Bonjour,

    Je reviens déjà avec une nouvelle question à résoudre. Je me demandais si un ensemble de listes pouvaient être créées grâce à une boucle. Apparemment, j'ai lu sur un autre forum que ce n'est pas possible.

    Je tente donc de faire ma liste multidimensionnelle. J'ai un tableau dont les valeurs des 9 premières colonnes ne doivent pas être intégrées à mes listes. Et je souhaite ensuite créer une liste toute les deux colonnes. Soit :

    col_1 col_2 … col_9 col_10 col_11 col_12 col_13 col_14
    1a 2a … 9a 10a 11a 12a 13a 14a
    1b 2b … 9b 10b 11b 12b 13b 14b

    liste_globale = [[10a,10b],[12a,12b],[14a,14b]]

    Avec nb_ind = nombre de listes total dans ma liste (soit ici 3 par exemple)

    Sachant que ligne = ['1a','2a', … '9a','10a','11a','12a','13a','14a'], j'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for ligne in lecteur:
    			i = 1
    			j = 1
    			while i <= nb_ind:
    				liste_globale.append(ligne[int(9+j)])
    				j += 2
    				i += 1
    Mais le résultat est une liste vide. Auriez-vous une idée ?

    Pour créer une liste simple, j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for ligne in lecteur:
    	liste.append(ligne[int(num_col)])
    Mais de la à mettre ça en boucle, ça devient plus compliqué...

    Merci pour votre aide,

    Emmanuel.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Tu as zip qui te permet d'itérer sur plusieurs listes en même temps.

    Quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    base = 9
    nb_ind = 3
     
    l_1 = ['1a','2a', '3a','4a','5a','6a','7a','8a', '9a','10a','11a','12a','13a','14a']
    l_2 = ['1b','2b', '3b','4b','5b','6b','7b','8b', '9b','10b','11b','12b','13b','14b']
     
    l_global = []
    for a, b in zip(l_1[base:base+nb_ind], l_2[base:base+nb_ind]):
        l_global.append([a, b])
     
    print l_global
     
    >>> [['10a', '10b'], ['11a', '11b'], ['12a', '12b']]

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Salut VinsS,

    Merci pour ta réponse.
    Disons qu'à la base je ne voulais pas forcément créer une liste de listes. Car à partir de ma liste de listes il me faudra dans tous les cas isoler chacune de mes listes pour que je puisse les exploiter. Mais d'après mes recherches, c'est apparemment la seule manière pour créer plusieurs listes avec une boucle. Peut-être que je me trompe… ?

    La difficulté c'est que mes lignes (correspondant à tes l_1 et l_2) sont beaucoup plus nombreuses, il me faudrait donc faire une boucle sur toutes les lignes… Je continue à chercher, mais j'ai l'impression que le problème s'est complexifié…

    Merci,

    Emmanuel.

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Pour itérer sur ta longue liste de lignes deux par deux, tu peux utiliser l'argument step de range
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    >>> l = [1, 2, 3, 4, 5, 6, 7]
    >>> for i in range(0, len(l)-2, 2):    # Le troisième argument est le step
    ...     print l[i], l[i+1]
    ... 
    1 2
    3 4
    5 6
    >>>

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 048
    Points : 1 378
    Points
    1 378
    Par défaut
    Quelqu'un a comprit la question ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Désolé pour ma réponse tardive et merci pour les vôtres.
    Merci VinsS pour ta piste au sujet du step, c'est ce que j'ai utilisé.
    Voici où j'en suis pour le moment. Je n'obtiens pas exactement ce que j'aimerais car dans mon range [11,13] il y a apparemment les colonnes 11, 12 et 13 d'où l'erreur, mais j'y travaille.
    Je reviens vers vous une fois que j'ai trouvé, si vous avez des idées, n'hésitez pas :-). Est-ce que c'est plus clair maintenant josmiley ?

    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
    if chaine.lower() == "XXX":
    	with open(file, 'rU') as fcsv:
    		lecteur = csv.reader(fcsv, delimiter='\t')
    		ligne = lecteur.next()
     		taille_col=len(ligne)
     		col = []
     		for i in range(11,taille_col+2,2):
    			col.append([])
    	with open(file, 'rU') as fcsv:
    		lecteur = csv.reader(fcsv, delimiter='\t')
    		for ligne in lecteur:
    			Noms.append(ligne[int(col_name)])
    			Positions.append(ligne[int(col_pos)])
    			compt = 0
    			while i in range(11,taille_col+2,2):
    				col[compt].append(ligne[i])
    				compt +=1
    Merci à nouveau, bonne journée à tous,

    Emmanuel.

  7. #7
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if chaine.lower() == "XXX":
    ... Tu sais à quoi sert la méthode lower ?

    Ou alors tu ne veux pas donner la vraie valeur, mais tu mets 'xxx', restons dans la cohérence.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Re,

    Oui, pardon, désolé, j'ai vite remplacé le nom de mon fichier juste avant de le poster. Il s'agit bien de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if chaine.lower() == "xxx":
    Merci, bonne journée,

    Emmanuel.

Discussions similaires

  1. Créer des variables dans une boucle
    Par xess91 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/03/2010, 10h41
  2. créer des Jlabel dans une boucle
    Par ballantine's dans le forum Débuter
    Réponses: 11
    Dernier message: 18/01/2010, 13h20
  3. Positionner des Div grâce à une boucle
    Par Snap luvs pastèque dans le forum Langage
    Réponses: 6
    Dernier message: 07/09/2009, 10h18
  4. [E-07] créer des variables dans une boucle ?
    Par edouardg dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/12/2008, 22h19

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