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 dans une liste


Sujet :

Python

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Créer des listes dans une liste
    Bonsoir,

    Je suis bloquée dans un projet, je pense à cause d'une erreur de logique que je n'arrive pas à détecter. Mon but est de créer une liste de chaines de caractères à partir de colonnes d'un Dataframe. Ensuite je dois créer une deuxième liste en modifiant les noms de la première liste. Ensuite je dois calculer des coefficients par rapport à des valeurs qui sont dans mon dataframe. Je voudrais ensuite que chaque colonne de coefficients forme une liste qui prenne le nom de colonne que j'ai défini dans ma deuxième liste de noms.

    En somme :
    liste_nom_col = [nom_col_1,nom_col_2]
    liste_nom_col_coef = [nom_col_1_coef,nom_col_2_coef]
    calcul des coef de nom_col_1_coef et nom_col_2_coef à partir des valeurs dans nom_col_1 et nom_col_2 respectivement
    créer des listes dont les noms sont nom_col_1_coef et nom_col_2_coef, et qui soient remplies avec les valeurs des coef respectives



    Voilà ce que j'ai fait :

    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
    #Caractéristiques de la portion de Dataframe à utiliser
    colonne=df.shape[1]-4
    ligne=df.shape[0]
    print(colonne,ligne)
     
    #Créer une liste avec les nom des colonnes du Dataframe à utiliser
    list_days=df.columns[4:].values.tolist()
    print('list_day :', list_days)
     
    #Créer une liste des noms des colonnes (sous forme de liste) à utiliser pour stocker les coefs s
    list_days_s = []
    for d in range(colonne):
        >list_days_s.append(list_days[d]+'_s')
    print("list_days_s",list_days_s)
     
    #Définiton de la fonction pour calculer le coef s pour chaque ligne de chaque colonne
    def coef_s(colonne,ligne):
        >for n in range(colonne):
           >> list_days_s[n] = [] #créer une liste vide pour accueillir les valeurs de s associées
           >> for i in range(ligne):
                >>>s = 2000 * float(df.loc[i][4+n]) / 17500 #df.loc[row][colum] --> retourne ce qui a dans la case sous forme de chaine (string), ligne et colonne doivent être des nombres
                >>>list_days_s[n].append(s)
            >>return list_days_s[n]
        >return list_days_s
     
    coef_s(colonne,ligne)
    Et voilà ce que j'obtiens :

    3 13
    list_day : ['22_ma_dead', '29_ma_dead', '05_ap_dead']
    list_days_s ['22_ma_dead_s', '29_ma_dead_s', '05_ap_dead_s']
    
    [1106.857142857143,
     458.62857142857143,
     145.37142857142857,
     246.74285714285713,
     18.17142857142857,
     983.0857142857143,
     794.8571428571429,
     1848.1142857142856,
     283.54285714285714,
     351.8857142857143,
     397.7142857142857,
     249.6,
     734.8571428571429]
    Or je voudrais trois listes comme celle-ci !

    Est-ce que quelqu'un pourrait m'éclairer s'il-vous-plait ?

    Merci beaucoup par avance !

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Halia_Tyrek Voir le message
    je pense à cause d'une erreur de logique que je n'arrive pas à détecter.
    Dans ce cas il faut remonter aux bases puis reprendre les contraintes étape par étape.

    Citation Envoyé par Halia_Tyrek Voir le message
    Mon but est de créer une liste de chaines de caractères à partir de colonnes d'un Dataframe.
    Ok liste1=["xxx", "yyy", "zzz"] (que la chaine vienne d'une colonne d'un Dataframe ou bien de Mars ça ne change rien au principe)
    De plus, si la liste n'a pas vocation à évoluer, alors elle aura tout avantage à devenir tuple, ça mange moins de ressources => liste1=("xxx", "yyy", "zzz").

    Citation Envoyé par Halia_Tyrek Voir le message
    Ensuite je dois créer une deuxième liste en modifiant les noms de la première liste.
    Ok liste2=[x+"_s" for x in liste1] (accessoirement on sera en droit de se demander le rôle de la première liste vu que la seconde aurait pu être créée directement!!!). Et ça marche aussi si on veut faire un tuple => liste2=tuple(x+"_s" for x in liste1).

    Citation Envoyé par Halia_Tyrek Voir le message
    Ensuite je dois calculer des coefficients par rapport à des valeurs qui sont dans mon dataframe. Je voudrais ensuite que chaque colonne de coefficients forme une liste qui prenne le nom de colonne que j'ai défini dans ma deuxième liste de noms.
    Pour ça il te faut un dico. Exemple tu veux une variable "a" qui vaut 5 => a=5. Mais si maintenant tu veux une variable dont le nom est lui-même variable, alors l'outil le plus adéquat pour ça est un dico => dico={"a" : 5}.

    Donc adapté à ta liste (ton tuple):
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> dico=dict((x, list()) for x in liste2)
    >>> print(dico)
    {'xxx_s': [], 'yyy_s': [], 'zzz_s': []}
    On a bien une liste associée pour chaque nom de liste2. Ne reste plus qu'à remplir dico["xxx_z"] ou dico["yyy_s"] ou dico["zzz_s"] selon ce que tu récupères (ex dico["xxx_z"].append(1); dico["xxx_z"].append(2))...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Sve@r Voir le message

    Donc adapté à ta liste (ton tuple):
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> dico=dict((x, list()) for x in liste2)
    >>> print(dico)
    {'xxx_s': [], 'yyy_s': [], 'zzz_s': []}
    On a bien une liste associée pour chaque nom de liste2.
    Bonjour, merci pour cette réponse ! Cependant j'ai voulu utiliser la ligne de code :
    dico=dict((x, list()) for x in list_days_s)
    Mais j'obtiens le message d'erreur : "dict" object is not callable.
    J'ai trouvé sur des forums que cette erreur viens d'un mauvais appel du dictionnaire, j'ai tenté quelques modifications mais je n'arrive pas à résoudre ce problème...

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Halia_Tyrek Voir le message
    Mais j'obtiens le message d'erreur : "dict" object is not callable.
    J'ai trouvé sur des forums que cette erreur viens d'un mauvais appel du dictionnaire, j'ai tenté quelques modifications mais je n'arrive pas à résoudre ce problème...
    Tu as dû écrire quelque part dict={...}. Ben voilà, c'est ce qui arrive quand on utilise des noms de type comme noms de variables.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Tu as dû écrire quelque part dict={...}. Ben voilà, c'est ce qui arrive quand on utilise des noms de type comme noms de variables.
    Je l'avais écrit dans une version précédente de mon script, je l'ai retiré et j'ai testé à nouveau avant de poser cette question, et j'avais toujours le même message. Est-ce qu'il est possible que ce dict={} soit en quelque sorte resté en mémoire et qu'il continue à générer une erreur ?

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Halia_Tyrek Voir le message
    Est-ce qu'il est possible que ce dict={} soit en quelque sorte resté en mémoire et qu'il continue à générer une erreur ?
    Non. Indépendance des processus dans un OS. Quand P1 se termine, toute sa RAM est libérée. C'est même tellement le cas que les soucis qu'on a généralement c'est "comment sauvegarder pour ne pas perdre". Soit tu exécutes toujours l'ancien, soit tu en as un autre ailleurs. Ou peut-être dans un truc que tu importes...

    Pour le trouver, écris toto=dict() au début de ton code puis exécute-le. Si c'est ok déplace-le au milieu, puis à la fin. Et de dichotomie en dichotomies, tu trouveras l'endroit qui fait foirer (tu peux d'ailleurs multiplier les toto=dict() et en mettre un peu de partout pour accélérer la recherche...)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Pour le trouver, écris toto=dict() au début de ton code puis exécute-le. Si c'est ok déplace-le au milieu, puis à la fin. Et de dichotomie en dichotomies, tu trouveras l'endroit qui fait foirer (tu peux d'ailleurs multiplier les toto=dict() et en mettre un peu de partout pour accélérer la recherche...)
    Merci pour l'astuce ! J'ai testé mon code, et il s'avère que l'erreur s'affichait même avant ma première ligne de code... J'ai redémarré mon ordinateur et le problème a été résolu sans que j'ai besoin de changer quoique ce soit. Mon dictionnaire est bien créé !

    Merci beaucoup pour ton temps et ton aide, ça permet vraiment de pouvoir avancer, parce que pour l'instant je connais si peu de choses que je me retrouve vite bloquée ^^

  8. #8
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Citation Envoyé par Halia_Tyrek Voir le message
    Est-ce qu'il est possible que ce dict={} soit en quelque sorte resté en mémoire et qu'il continue à générer une erreur ?
    Contrairement à ce que dit Sver, pour moi la réponse est clairement OUI. Surtout si tu utilises un IDE, l'ensemble des variables globales est mémorisé (et accessible) depuis le terminal python. Pour effacer tout ses résidus, certes un redémarrage de l'ordi fonctionne, mais d'autre manière moins contraignante le permettent aussi :
    - Dans les IDE, il y a généralement un bouton, ou un menu quelquepart pour effacer toutes les variables.
    - Redémarrer l'IDE

  9. #9
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Surtout si tu utilises un IDE, l'ensemble des variables globales est mémorisé (et accessible) depuis le terminal python
    Autrement dit si tu restes dans le processus IDE...

    Citation Envoyé par lg_53 Voir le message
    Redémarrer l'IDE
    Ce qui correspond donc parfaitement à ce que j'ai dit concernant la fin d'un processus dans un OS.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre émérite

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Points : 2 328
    Points
    2 328
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Autrement dit si tu restes dans le processus IDE...


    Ce qui correspond donc parfaitement à ce que j'ai dit concernant la fin d'un processus dans un OS.
    Oui tout à fait, mais vu comment notre ami à posé la question, je pense que le processus IDE, c'est qqch d'un peu lointain pour lui comme notion...

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2021
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    J'avoue qu'avec les deux trois cours de python que j'ai eu, je ne sais pas ce qu'est ni un OS ni un IDE ^^

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Un OS (Operating System) n'a rien à voir avec Python. c'est le truc qui gère ton ordi, ton écran, ton clavier, ta souris, qui lance le logiciel que tu veux quand tu cliques sur son icône et qui nettoie sa mémoire quand il se termine. Bref c'est Windows (enfin je présume que t'es sous Windows). Il y a aussi Unix, Linux, Mac.
    Donc ça n'a rien à voir avec Python lui-même mais ça s'occupe quand-même de lancer Python quand tu le demandes.

    Un IDE (Integrated Development Evironment) c'est un truc qui te permet de développer. Ca te présente les différents sources de ton programme, le source sur lequel tu es en train de travailler. Il te le colorise selon la syntaxe et peut exécuter le programme et te montrer le résultat. Ca c'est plus en rapport avec Python même s'il y a des IDE pour quasiment tous les langages.
    Et Python possède un petit IDE natif nommé "idle" qui se présente comme une fenêtre blanche dans laquelle on peut taper de petits exemples ou exécuter des scripts complets. Si c'est par lui que tu es passé pour exécuter ton programme, comme lui il n'était pas arrêté entre deux exécutions de script il est possible que ce soit lui qui ait conservé les infos du premier.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [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
  2. créer des séries dans une requête
    Par raiamanu dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 12/04/2008, 07h40
  3. Réponses: 5
    Dernier message: 17/01/2007, 15h02
  4. Réponses: 1
    Dernier message: 22/12/2005, 09h03

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