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 :

Séparer une liste en sous liste


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par défaut Séparer une liste en sous liste
    Bonjour à tous,

    j'ai une liste qui ressemble à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['H1', 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 'H8', 0.0158, 0.0158, 'H12', 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151]
    Mon objectif est d'isoler chaque nom avec les valeurs qui suivent dans des listes séparées. Pour cela je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    values = ['H1', 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 'H8', 0.0158, 0.0158, 'H12', 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151]
    capteurs_noms = []
    values_capteurs = []
    capteurs_num = -1
    for i in range(len(values)):
        if type(values[i]) == str:
            capteurs_num = capteurs_num+1
            capteurs_noms.append(values[i])
            values_capteurs.append([values[i]]) 
        elif type(values[i]) == float:
            values_capteurs[capteurs_num].append(values[i])
    Mon besoin est d'isoler le couple nom/valeurs pour utilisation par la suite. Y a-t-il plus simple plus "esthétique", au moins je pense le code correct dans le sens où il ne plante pas et donne un résultat attendu ^^.
    Merci

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

    Coté plus esthétique, pensez fonction qui prends la liste en argument et qui retourne le tableau. Ce qui vous permettrait d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    capteurs_noms, values_capteurs = myfunction(values)
    Et de cacher les détails dans myfunction.

    Ca ne change pas grand chose sauf que si demain vous trouvez un meilleur algo. c'est juste dans myfonction que çà se passe.

    Après pour trouver les index des items qui sont des caractères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ix = []
    for i, e in values:
        if isinstance(value, str):
              ix.append(i)
    ou plus succinctement:ix = [ i for i, e in enumerate(values) id isinstance(e, str) ]Cela fait, on sait que les "bouts" commencent a peu près en ix[i] et se terminent à ix[i+1]... mais il manque la fin: ix.append(-1)... Et les débuts sont alors ix[:-1] et les fins ix[1:]. D'où:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    values_capteurs = []
    for a, b in zip(ix[:-1], ix[1:]):
        values_capteurs += L[a:b]
    ou:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    values_capteurs = [ values[a:b] for a, b in zip(ix[:-1], ix[1:]) ]
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par défaut
    Bonjour Wiztricks,

    pour le coté fonction c'est effectivement l'étape suivante comme suggérer, qui nous donnerait cela :
    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
    values = ['H1', 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 'H8', 0.0158, 0.0158, 'H12', 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151]
     
    def isol_capteurs(values):
        capteurs_noms = []
        values_capteurs = []
        capteurs_num = -1
        for i in range(len(values)):
            if type(values[i]) == str:
                capteurs_num = capteurs_num+1
                capteurs_noms.append(values[i])
                values_capteurs.append([values[i]])        
            elif type(values[i]) == float:
                values_capteurs[capteurs_num].append(values[i])
        return (capteurs_noms, values_capteurs)
     
    capteurs_noms, values_capteurs = isol_capteurs(values)
    Pour la suite, j'ai peur que vous alliez un peu trop vite pour moi ^^. Ma première idée était effectivement en comptant le nombre de valeurs.

    Je pense avoir un peu compris isinstance et zip. Je ne les avaient mais jamais fait tourné, merci pour ces lacunes ^^.

    J'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ix = []
    L=[]
    for i in range(len(values)):
        value = values[i]
        if isinstance(value, str):
              ix.append(i)
     
     
    values_capteurs = []
    a = capteurs_noms
    b = values
    for a, b in zip(ix[:-1], ix[1:]):
        values_capteurs += L[a:b]
    J'ai plus de mal avec la fonction zip, ou du moins dans son association avec ix. Pour l'instant je n'arrive pas associer les deux fonctions. Si j'ai bien compris il me reste récupérer mes ix. Bon je me mélange les pinceaux là. Dans la première boucle je récupère bien la position du nom, mais je n'arrive pas à l'exploiter avec la fonction zip. J'ai l'impression qu'il y a une double boucle que je n'arrive pas à voir.

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

    Citation Envoyé par Aelurus_ Voir le message
    Pour la suite, j'ai peur que vous alliez un peu trop vite pour moi ^^.
    L'avantage de la fonction, c'est qu'on attend d'elle un boulot qu'on peut tester.
    Après ne vous prenez pas le chou avec le code que je vous ai suggéré, çà ne marchera pas mieux et, pire, vous n'allez pas être trop confiant avec des lignes que vous ne comprenez pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def isol_capteurs(values):
         ix = [ i for i, e in enumerate(values) id isinstance(e, str) ] + [-1]
         values_capteurs = [ values[a:b] for a, b in zip(ix[:-1], ix[1:]) ]
         return [ v[0] for v in values_capteurs], values_capteurs
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre confirmé
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par défaut
    Yesssss,
    effectivement, votre code est largement plus court, mais il est trop costaud, trop concis ^^. Je ne vais pas l'utiliser, mais je garde en mémoire isinstance et zip. Je vois aussi qu'il offre une simplicité agréable. Votre déclaration de boucle me plait je vais tenter de l'appliquer.

    Grand merci pour ces retours.

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut


    @wiztricks : le zip ne me donne pas la dernière série de valeurs.

    Code Python : 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
    datas = [
        'H1', 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154,
        'H8', 0.0158, 0.0158,
        'H12', 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151,
    ]
     
    ix = [ i for i, e in enumerate(datas) if isinstance(e, str) ]
     
    # debug
    print(ix) # [0, 9, 12]
    print(list(zip(ix[:-1], ix[1:]))) # [(0, 9), (9, 12)]
    # fin debug
     
    values_capteurs = [ datas[a:b] for a, b in zip(ix[:-1], ix[1:]) ]
    values_capteurs.append(datas[ix[-1]:])
     
    print(values_capteurs)
     
    """
    [
        ['H1', 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154], 
        ['H8', 0.0158, 0.0158], 
        ['H12', 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151]
    ]
    """

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

    Citation Envoyé par danielhagnoul Voir le message
    @wiztricks : le zip ne me donne pas la dernière série de valeurs.
    C'est parce que vous avez oublié d'ajouter la fin: ix.append(-1).

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

  8. #8
    Membre confirmé
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par défaut
    Salut tous,
    Citation Envoyé par danielhagnoul Voir le message

    @wiztricks : le zip ne me donne pas la dernière série de valeurs.
    Je confirme, je trouve effectivement la même différence, il manque une valeur à 'H12'. Cela vient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if isinstance(e, str) ] + [-1]
    . Mais je n'arrive pas, ne sais pas corriger ce décalage dans le code à wistricks.
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    values = [
            'H1', 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154,
            'H8', 0.0158, 0.0158,
            'H12', 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151
    ]
     
    def isol_capteurs(values):
        capteurs_noms = []
        values_capteurs = []
        capteurs_num = -1
        for i in range(len(values)):
            if type(values[i]) == str:
                capteurs_num = capteurs_num+1
                capteurs_noms.append((values[i]))
                values_capteurs.append([values[i]])        
            elif type(values[i]) == float:
                values_capteurs[capteurs_num].append(values[i])
        return (capteurs_noms, values_capteurs)
     
    capteurs_noms, values_capteurs = isol_capteurs(values)
     
    print (capteurs_noms)
    print (values_capteurs)
     
    def isol_capteursW(values):
         ix = [ i for i, e in enumerate(values) if isinstance(e, str) ] + [-1]
         values_capteurs = [ values[a:b] for a, b in zip(ix[:-1], ix[1:]) ]
         return [ v[0] for v in values_capteurs], values_capteurs
     
    capteurs_noms, values_capteurs = isol_capteursW(values)
     
    print (capteurs_noms)
    print (values_capteurs)
     
    """sortie
    ['H1', 'H8', 'H12']
    [['H1', 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154],
     ['H8', 0.0158, 0.0158],
     ['H12', 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151]]
    ['H1', 'H8', 'H12']
    [['H1', 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154],
     ['H8', 0.0158, 0.0158],
     ['H12', 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151]]
    """
    Citation Envoyé par wiztricks Voir le message
    Salut,



    C'est parce que vous avez oublié d'ajouter la fin: ix.append(-1).

    - W
    je tente de comprendre ou est cette fin ^^, si ce n'est pas +[-1].


    fred1599, merci de ton retour. Par contre ton hypothèse de départ n'est pas entièrement fausse car c'est justement pour gérer ou ne pas gérer cette création en amont.

    Les valeurs sont issues de manipulation expérimentale et proviennent d'un fichier. Les 'H1' et autres sont mis à la main dans la colonne des données. Cela permet de les séparer d'une manière assez simple avec une certaine vérification de la mesure récupérée. Cette boucle me permet de faire un seul fichier avec plusieures jeu de valeurs à traiter au lieu d'un fichier par jeu de valeurs.
    Je reste persuader que ma logique de traitement est perfectible, et mon plus gros souci dans cet exercice est l'identification et la séparation de mes données.Les résultats obtenue sont juste avec une forme de données d'entrée. Je cherche effectivement à optimiser tant ma logique que le code qui en découlecar les deux sont liées, une bonne logique aide à codé et une meilleur maitrise du code aide la logique ^^.

    Cependant ta version du dictionnaire est très intéressante, elle me ferait faire une certaine quantité de modification sur la suite des traitements qui sont construits sur des listes et tableaux. Les dictionnaires ne me sont pas très familiers non plus ^^.

    Merci de ton exemple que je vais essayer de manipuler.

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

    Citation Envoyé par Aelurus_ Voir le message
    Mais je n'arrive pas, ne sais pas corriger ce décalage dans le code à wistricks.
    Quand ix.append(-1) est là, effectivement le -1 est une erreur.
    Donc on reprend ce qu'on cherche à faire.
    Si ix est la liste des positions des "str".
    • ix[0], ix[1] définit le premier intervalle,
    • ix[1], ix[2] définit le 2nd,
    • etc...


    Quand on arrive à la position du dernier str, il manque la fin de l'intervalle qui est len(values) (et non -1).

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

  10. #10
    Membre confirmé
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par défaut
    Jusque-là pas trop de soucis. Je comprends la nécessité du -1 qui donne la position de la dernière valeur quand ce n'est pas la dernière série. Ne comprenant qu'un petit votre syntaxe, je me dis qu'il y a quelque chose à faire avec la double incrémentation (i for i,e...) dans votre première boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ix = [ i for i, e in enumerate(values) if isinstance(e, str) ] + [-1]
    , mais ne comprend pas comme identifier le dernier tour en fait.
    Ou alors c'est ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    values_capteurs = [ values[a:b] for a, b in zip(ix[:-1], ix[1:]) ]
    , pour la derniere valeur il ne faut pas de ix[:-1] mais 0. Donc une autre lignes ou une modification par là ^^.

  11. #11
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par Aelurus_ Voir le message
    Ne comprenant qu'un petit votre syntaxe, je me dis qu'il y a quelque chose à faire avec la double incrémentation (i for i,e...) dans votre première boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ix = [ i for i, e in enumerate(values) if isinstance(e, str) ] + [-1]
    Ce n'est pas une double incrémentation, c'est une sorte de mélange entre: for e in values et for i in range(len(values)) pour avoir à la fois index et valeur. On peut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ i for i in range(len(values)) if isinstance(values[i], str) ] + [len(values)]
    Citation Envoyé par Aelurus_ Voir le message
    Ou alors c'est ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    values_capteurs = [ values[a:b] for a, b in zip(ix[:-1], ix[1:]) ]
    , pour la derniere valeur il ne faut pas de ix[:-1] mais 0. Donc une autre lignes ou une modification par là ^^.
    On peut aussi écrire çà: [ value[ix[i]:ix[i+1]] for i in range(len(ix)-1) ]L'important est ce qu'on cherche à faire, pas forcément le Python avec lequel on le fait.

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

  12. #12
    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
    Citation Envoyé par Aelurus_ Voir le message
    Bonjour à tous,

    j'ai une liste qui ressemble à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['H1', 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 'H8', 0.0158, 0.0158, 'H12', 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151]
    ça laisse à penser qu'avant cette construction et le mélange des genres, les sous listes auraient pu être construites à la volée.

    La mise en place de sous listes me semblent pas non plus très pertinents, on aurait pu utiliser un dictionnaire avec comme clés les 'H...' et valeurs une liste de flottants, et cela aussi implique cette création avant d'en arriver à cette liste.

    Sinon en partant de cette base tout de même,

    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
    datas = [    'H1', 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154,
        'H8', 0.0158, 0.0158,
        'H12', 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151,
    ]
     
    last_key = None
    d = {}
    for value in datas:
        if isinstance(value, str):
            d[value] = []
            last_key = value
        elif last_key:
            d[last_key].append(value)
        else:
            raise KeyError("error in the first item")
     
    print(d)
     
    """
    {
      'H1': [0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154],
      'H12': [0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151],
      'H8': [0.0158, 0.0158]
    }
    """

  13. #13
    Membre confirmé
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par défaut
    En regardant ta boucle de plus prés j'en tire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def isol_capteurs3(values):
        capteurs_noms = []
        values_capteurs = []
        capteurs_num = -1
        for value in values:
            if isinstance(value, str):
                capteurs_num = capteurs_num+1
                capteurs_noms.append((value))
                values_capteurs.append([value])        
            elif type(value) == float:
                values_capteurs[capteurs_num].append(value)
        return (capteurs_noms, values_capteurs)
    Par intuition je dirais qu'il est plus léger en ressources car le "i" est enlevé, donc à minima une variable de moins. Ce n'est que mon avis car pas vérifié.

  14. #14
    Membre confirmé
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    ça laisse à penser qu'avant cette construction et le mélange des genres, les sous listes auraient pu être construites à la volée.

    La mise en place de sous listes me semblent pas non plus très pertinents, on aurait pu utiliser un dictionnaire avec comme clés les 'H...' et valeurs une liste de flottants, et cela aussi implique cette création avant d'en arriver à cette liste.

    Sinon en partant de cette base tout de même,

    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
    datas = [    'H1', 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154,
        'H8', 0.0158, 0.0158,
        'H12', 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151,
    ]
     
    last_key = None
    d = {}
    for value in datas:
        if isinstance(value, str):
            d[value] = []
            last_key = value
        elif last_key:
            d[last_key].append(value)
        else:
            raise KeyError("error in the first item")
     
    print(d)
     
    """
    {
      'H1': [0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154, 0.0154],
      'H12': [0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151, 0.0151],
      'H8': [0.0158, 0.0158]
    }
    """
    Ton idée de dictionnaire me plait bien et colle bien à ce que je veux et il ton code tourne plus vite aussi. Je vais adapter la suite de mon code en ce sens. Désolé du retour tardif.
    Merci pour cet exemple qui en plus me pousse à traiter les erreurs.

  15. #15
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    @wiztricks: en auscultant le code ci-dessous j'ai compris comment il fonctionne, merci pour cette zip idée.

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def isol_capteurs(values):
        ix = [i for i, e in enumerate(values) if isinstance(e, str)] + [-1]
        return [values[a:b] for a, b in zip(ix[:-1], ix[1:])]

    @fred1599: la construction, au départ, d'un dict au lieu d'une list est certainement la meilleure solution.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

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

Discussions similaires

  1. Séparer une liste de nombres en deux sous-listes dont la somme des nombres est égale
    Par albano06 dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 04/10/2016, 17h47
  2. Réponses: 2
    Dernier message: 28/05/2015, 17h28
  3. Séparer une liste en plusieurs pour un traitement ultérieur
    Par Fukasaya dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 30/10/2012, 15h22
  4. [ul/li] Séparer une liste sur plusieurs colonnes
    Par Wookai dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 22/06/2007, 14h01
  5. séparer une liste en deux listes
    Par ulysse031 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 14/04/2007, 15h08

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