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 :

écrire ligne à partir de plusieurs listes de taille différente


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Par défaut écrire ligne à partir de plusieurs listes de taille différente
    Bonjour a tous,

    Je débute en python, et j'ai un petit problème, je m'explique:

    J'ai 3 listes qui après avoir lu un fichier csv on récolté des info, cependant elles n'ont pas du tout la meme taille.
    Et je voudrais écrire les données dans un csv sous la forme:
    list1-list2-list3 en colonne voici mon code:

    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
     
    list1=list()
    list2=list()
    list3=list()
     
    for row in reader:
      if not row[0] in list1:
        list1.append(row[0])
     
      if not row[1] in list2:
        list2.append(row[1])
     
      if not row[2] in list3:
        list3.append(row[2])
     
    #ET LA JE VOUDRAI ECRIRE DANS MON writer qui est un csv.writer mais en COLONNE
    writer.writerow([list1,list2,list3])
    Dans mon csv ouvert avec excel je voudrais
    A - B - C
    list1(0) - list2(0) - list3(0)
    list1(1) - RIEN - list3(1)
    RIEN - RIEN - list3(2)
    etc en fonction de la taille des listes!

    Voila désolès si il y a une petite erreur de syntaxe, je n'ai pas le code sur ce PC.

    J'ai essayé avec pop() mais toujours un dépassement d'élement pour les list comportant moins d'élément, j'ai essayé avec des for imbriqué un peu tout mais rien

    Avez vous une idée??

    Merci d'avance

    Bastien

  2. #2
    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
    Le plus simple me semble être de rajouter "RIEN" autant de fois qu’il le faut aux deux listes les plus petites, non*?

    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
    list1=list()
    list2=list()
    list3=list()
     
    for row in reader:
      if not row[0] in list1:
        list1.append(row[0])
     
      if not row[1] in list2:
        list2.append(row[1])
     
      if not row[2] in list3:
        list3.append(row[2])
     
    ln1 = len(list1)
    ln2 = len(list2)
    ln3 = len(list3)
    ln = max(ln1, ln2, ln3)
    list1[ln1:] = ['RIEN']*ln-ln1
    list2[ln2:] = ['RIEN']*ln-ln2
    list3[ln3:] = ['RIEN']*ln-ln3
     
    #ET LA JE VOUDRAI ECRIRE DANS MON writer qui est un csv.writer mais en COLONNE
    writer.writerow([list1,list2,list3])

  3. #3
    Membre éclairé Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Par défaut
    Merci mont29 pour ta réponse,

    Quand je disais RIEN c'est un vide, je peux l'exprimer de cette manière tu penses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list1[ln1:] = ['']*(ln-ln1)
    ou plutoto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list1[ln1:] = [""]*(ln-ln1)
    Merci en tous cas pour ton code

    EDIT juste fais attention dans ton code il faut y rajouter des parenthese mais bon faut bien que je bosse un minimum

    Bastien

  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
    Houlalalalalalalalalala… J’ai hooooooonte… (le coup des parenthèses)

    Argh*! Quelqu’un peut me prêter un bout de corde (à piano, je mérite le pire du pire*!), que j’aille de ce pas me pendre*?

    Sinon, '' ou "", ça ne change rien, normalement…

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Par défaut
    Je ne suis pas sûr d'avoir bien compris ce que tu cherches à faire mais peut-être que quelquechose de similaire à ceci ferait ce que tu veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from itertools import izip_longest
    >>> l1 = [0,1,2]
    >>> l2 = [0,1]
    >>> l3 = [0,1,2,3,4]
    >>> for i1,i2,i3 in izip_longest(l1,l2,l3,fillvalue='Rien'):  print i1,i2,i3
     
    0 0 0
    1 1 1
    2 Rien 2
    Rien Rien 3
    Rien Rien 4

  6. #6
    Membre éclairé Avatar de bastou93
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2010
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 217
    Par défaut
    Houlalalalalalalalalala… J’ai hooooooonte… (le coup des parenthèses)

    Argh*! Quelqu’un peut me prêter un bout de corde (à piano, je mérite le pire du pire*!), que j’aille de ce pas me pendre*?
    Ne le prends pas mal je disais juste cela au cas ou quelqu'un en aurait besoin aussi...

    Sinon, '' ou "", ça ne change rien, normalement…
    Ok j'ai donc fais avec '' merci beaucoup

    Je ne suis pas sûr d'avoir bien compris ce que tu cherches à faire mais peut-être que quelquechose de similaire à ceci ferait ce que tu veux :
    Bonjour Alexis,
    Merci pour ton code, il fonctionne en effet, cependant je préfère la solution de mont29 qui est plus dynamique et donc me convient mieux
    Mais sur ce point je suis d'accord, je viens de me relire c'est dur dur a comprendre j'aurais du etre plus claire mais c'est résolu c'est le principal


    Merci a tous

    Bastien

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

Discussions similaires

  1. [XL-2013] Extraction d'une ligne à partir de plusieurs classeurs
    Par Fataghost dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/03/2015, 09h58
  2. Créer une data.frame à partir de plusieurs listes
    Par charlotte77 dans le forum R
    Réponses: 4
    Dernier message: 10/06/2013, 23h38
  3. Drag de plusieurs lignes à partir d'une liste
    Par Samildanach dans le forum SWT/JFace
    Réponses: 0
    Dernier message: 15/12/2010, 10h49
  4. [Débutant] créer une matrice à partir de 2 autres de tailles différentes
    Par chevalvapeur dans le forum MATLAB
    Réponses: 6
    Dernier message: 04/12/2009, 14h57
  5. Dessiner mes lignes à partir d'une liste d'objets
    Par Cpt Anderson dans le forum Débuter
    Réponses: 3
    Dernier message: 14/11/2009, 10h51

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