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 :

fonction qui retourne les index des éléments vides d'une liste de liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Géomaticien
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Par défaut fonction qui retourne les index des éléments vides d'une liste de liste
    Bonjour,

    le titre ne devant pas être très explicite je précise mon problème du début :

    le script sur lequel je suis en train de travailler a pour but :

    - de faire une requête dans une base de données (sqlite)
    - d'écrire une "fiche" en html avec les éléments récupérés par la requête.

    Rien de bien compliqué donc sauf que dans ma base de données il y a des attributs qui ne sont parfois pas renseignés et j'aimerais que ma fiche html ne contienne que les champs pour lesquels des attributs sont renseignés.

    exemple :

    liste_exemple=[["attribut0","attribut1","","attribut3","",""],["attribut0","attribut1","","attribut3","","attribut5"],["","attribut1","","attribut3","","attribut5"]]

    dans cette liste de liste, seuls attribut2 et attribut4 ne sont jamais renseignés.

    je cherche à écrire une fonction qui me retournerait les index de ces attributs vides. Ex : a_supprimer=[2,4]

    j'y suis parvenu d'une façon pas très propre (voir le code ci-dessous) mais j'aimerais faire une fonction qui marcherait avec n'importe qu'elle liste de liste. Je n'arrive pas à voir comme cela est faisable. avez-vous une idée??

    Voici le code actuel :
    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
    28
    29
    30
    31
    32
    liste_exemple=[["attribut0","attribut1","","attribut3","",""],["attribut0","attribut1","","attribut3","","attribut5"],["","attribut1","","attribut3","","attribut5"]]
    attrib_list=[]
    attribut0,attribut1,attribut2,attribut3,attribut4,attribut5=[],[],[],[],[],[]
    for elem in liste_exemple:
        attribut0.append(elem[0])
        attribut1.append(elem[1])
        attribut2.append(elem[2])
        attribut3.append(elem[3])
        attribut4.append(elem[4])
        attribut5.append(elem[5])
    attrib_list.append(attribut0)
    attrib_list.append(attribut1)
    attrib_list.append(attribut2)
    attrib_list.append(attribut3)
    attrib_list.append(attribut4)
    attrib_list.append(attribut5)
     
    a_garder=[]
    a_supprimer=[]
     
    n=0
    for list_ind in attrib_list:
        test=''
        for elem in list_ind:
            test=test+elem
        if test != "":
            a_garder.append(n) # colonnes non vides
        else:
            a_supprimer.append(n) # colonnes vides
        n+=1
     
    print a_garder,a_supprimer

    Merci d'avance!

    Bonne après-midi!

  2. #2
    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,

    Une solution possible:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    a_supprimer = lambda L: [i for i, elem in enumerate(L) if elem==""]
     
    L = ["attribut0","attribut1","","attribut3","",""]
    print a_supprimer(L)
    [2, 4, 5]

  3. #3
    Membre habitué
    Homme Profil pro
    Géomaticien
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Par défaut
    Merci pour ton aide.

    Cependant mon problème est que en "entrée" je n'ai pas une liste "simple" mais une liste de listes d'éléments de type string (comme dans mon exemple).

    Et je veux que ma fonction ne me retourne les index pour lesquel chaque liste de ma liste sont vide (2 et 4 dans mon exemple). Je ne sais pas si c'est plus clair?

    Merci d'avance,

    Maxime

  4. #4
    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
    Eh non, je n'ai pas compris.

    Le mieux, c'est de donner un exemple:
    1- j'ai: [...]
    2- je veux: [...]

    Et on trouvera!

  5. #5
    Membre habitué
    Homme Profil pro
    Géomaticien
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Géomaticien
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Par défaut
    Ok ;-)

    Donc j'ai une liste (liste_exemple) comprenant plusieurs listes (ici 3 listes), comprenant chacunes 6 éléments de type string :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste_exemple=[["attribut0","attribut1","","attribut3","",""],["attribut0","attribut1","","attribut3","","attribut5"],["","attribut1","","attribut3","","attribut5"]]
    je veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    print a_supprimer
    [2,4]
    car pour chacune de mes 3 listes qui composent liste_exemple, les index 2 et 4 renvoient à un élément string vide "".

    Le code que j'ai mis dans mon premier poste fonctionne, tu peux le lancer tel quel. Le problème est que j'ai besoin d'une fonction qui s'adapte à n'importe qu'elle "liste de listes".

  6. #6
    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
    Ok, pour qu'un indice sorte, il faut que la chaine correspondante soit vide dans toutes les sous-listes.

    Dans ce cas essaie ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def indicesvides(L):
        a_supprimer = lambda L: [i for i, elem in enumerate(L) if elem==""]
        sup0 = set(a_supprimer(L[0]))
        for liste in L[1:]:
            sup0 = sup0 & set(a_supprimer(liste))
        return list(sup0)
     
    liste_exemple = [["attribut0","attribut1","","attribut3","",""],["attribut0","attribut1","","attribut3","","attribut5"],["","attribut1","","attribut3","","attribut5"]]
     
    print indicesvides(liste_exemple)
    [2, 4]
    J'utilise le type "set" qui donne accès aux fonctions d'ensemble, et l'opérateur '&' (intersection) ne laisse passer que les éléments présents dans les listes.

Discussions similaires

  1. fonction qui retourne les première lettres de chaque mot en PHP
    Par simonlaurent5000 dans le forum Langage
    Réponses: 5
    Dernier message: 22/02/2012, 20h50
  2. Réponses: 2
    Dernier message: 28/09/2011, 13h51
  3. Fonction qui définie les nombres des chiffres
    Par aliassaf dans le forum MATLAB
    Réponses: 3
    Dernier message: 02/04/2009, 01h38
  4. Réponses: 5
    Dernier message: 27/05/2008, 08h02
  5. Réponses: 2
    Dernier message: 24/08/2007, 09h48

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