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 liste à partir d'une string


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Créer liste à partir d'une string
    Bonjour à tous,

    est il possible de créer des listes dont le nom a été généré automatiquement, comme à l'aide de ce code.

    Le résultat donne donc une liste de string. Ce que je veux faire, c'est créer autant de liste qu'il y a d'item dans la liste et que leur nom soit celui des strings de la liste "liste_depart"

    Est ce possible ?

    Merci
    Fichiers attachés Fichiers attachés

  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,

    Pour un petit code il est mieux de l'insérer directement dans ton message.

    Avec les balises qui vont bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    liste_depart = []
     
    compteur = 1
     
    for i in range(1,15):
        liste_depart.append("liste"+str(i))
     
    print(liste_depart)
    Ce code semble déjà répondre à ce que tu demande, non ?

    ("liste"+str(i)) étant une string générée par le code et commence par le terme donné.

    Peut-être qu'un exemple de listes d'entrée et de sortie sera plus clair.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Salut, merci pour ta réponse.

    Je pense que je viens de trouver dans le FAQ. Et oui je me suis précipité dsl.

    Donc à partir de la liste que génère le code, je veux créer des listes à part entière qui auront comme nom les strings de la liste générée.

    http://python.developpez.com/faq/ind...es#GenStrDecla

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    INPUT :

    liste = ["liste1","liste2","liste3","liste4"]




    OUTPUT :

    liste1=[]
    liste2=[]
    liste3=[]
    liste4=[]
    Donc sur le FAQ je n'ai pas trouvé la réponse. On peut changer la string en variable. Pour changer en liste je n'ai pas trouvé.

  5. #5
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Je pense que tu n'as eu le déclic, mais la réponse est bel et bien dans le lien que tu donnes. Par contre la fonction exec est une grosse faille de sécurité car en tant qu'utilisateur on peut modifier le script qui est en train de s'exécuter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    items = ["liste1","liste2","liste3","liste4"]
    for item in items:
        commandline = "%s = []"%item
        print 'execution de la ligne "%s"'%commandline
        exec(commandline)
    print liste1, liste2, liste3, liste4
    De plus l'intérêt de cette façon de faire n'est pas terrible, car à chaque fois que tu voudras utiliser une de ces listes, il faudra passer par la commande exec ou eval...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    items = ["liste1","liste2","liste3","liste4"]
    for item in items:
        exec("%s = []"%item)
     
    templist = eval('liste4')
    for value in ["azerty", 33, 123.4566]:
        templist.append(value)
    print eval('liste4')
    A+

    Pfeuh

  6. #6
    Membre habitué Avatar de memento80
    Homme Profil pro
    Boulot : ne rentre pas dans une case
    Inscrit en
    Novembre 2004
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Boulot : ne rentre pas dans une case
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2004
    Messages : 163
    Points : 125
    Points
    125
    Par défaut
    Bonjour,

    Ou alors je ne suis pas sur d'avoir compris la question mais la réponse ne réside-t-elle pas dans la fonction exec tel que c'est expliqué dans la FAQ ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Une autre méthode est d'utiliser directement la fonction exec(unstr) qui exécute la chaîne de caractères passé en argument
     
    >>> exec('mavariable=5')
    >>> mavariable
    5
    >>> exec("mavariable=['5','6']")
    >>> mavariable
    ['5', '6']
    Ceci afin d'exécuter dans chaque boucle une exécution de création de la liste avec le nom souhaité.

    Edit : J'ai été moins rapide..

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Pour créer une liste vide nommée "foo", il suffit de créer l'entrée directement dans globals().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> items = ["liste1","liste2","liste3","liste4"]
    >>> for z in items:
    ...     globals()[z] = []
    ...
    >>> print (liste1, liste2, liste3, liste4)
    [] [] [] []
    eval et exec étant "troubles", autant apprendre à s'en passer.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Pour créer une liste vide nommée "foo", il suffit de créer l'entrée directement dans globals().
    Là, je dis "respect!" Tous les jours j'apprends, c'est ça que j'aime sur ce forum!

    A+

    Pfeuh

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 817
    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 817
    Points : 7 110
    Points
    7 110
    Par défaut
    @roro34570

    Niveau concept, on peut savoir quel est l'intérêt de faire ce genre de choses, car là je vois pas.

    Peux-tu nous donner la problématique, car ce genre de solutions est très rarement utilisée?

    La résultant étant n listes vides, il est nettement plus judicieux de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    liste_depart = [ [] for i in range(n)]
     
    for liste in liste_depart:
        # traitement de chacune des listes dans liste_depart
    Générer des noms de variables est quasiment inutile, il y a les boucles pour cela.

    Donc si on pouvait connaître ton problème, on pourrait plus facilement te donner des solutions adaptées...
    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)

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Niveau concept, on peut savoir quel est l'intérêt de faire ce genre de choses, car là je vois pas.

    Peux-tu nous donner la problématique, car ce genre de solutions est très rarement utilisée?
    Classer des objets dans des listes en faisant que le nom de la catégorie soit associé à la liste des objets correspondant est un b.a.ba de la conception.
    Avec une liste de listes, on n'a plus que des index.

    Ca fonctionne mais si les lignes sont des "catégories", il faudra avoir un mapping nom => index "à côté" pour se rappeler à quoi cela correspond.

    Le seul défaut est peut être de vouloir ranger cela dans globals() plutôt que dans un dict "particulier".

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

  11. #11
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 817
    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 817
    Points : 7 110
    Points
    7 110
    Par défaut
    Le seul défaut est peut être de vouloir ranger cela dans globals() plutôt que dans un dict "particulier".

    Eh bien oui, au cas où tu ne veux pas les index, le dictionnaire est plutôt sympa.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> liste_depart = {}
    >>> for i in range(4):
    ...     liste_depart["liste{}".format(i+1)] = []
    ... 
    >>> liste_depart
    {'liste1': [], 'liste3': [], 'liste2': [], 'liste4': []}
    >>> liste_depart['liste1'].append(15)
    >>> liste_depart
    {'liste1': [15], 'liste3': [], 'liste2': [], 'liste4': []}
    Visait-il la notion de catégorie? Je suis pas sûr, d'où ma question sur sa problématique.
    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)

  12. #12
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Mon but est en fait d'apprendre l'utilisation des classes. Donc je me suis donné un exercice : Des tirages aléatoires de nombres, comme au loto. Préalablement, on demande à l'utilisateur combien de série de tirage il désire et combien de numéro tiré pour chaque série.
    En tout cas merci pour toutes ces réponses. L'utilisation de globals() me satisfait beaucoup

  13. #13
    Membre du Club

    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2012
    Messages : 35
    Points : 49
    Points
    49
    Par défaut
    Bonsoir,

    Tu devrais éviter d'utiliser globals(), on sait jamais en cas de fausse manœuvre tu peux supprimer toutes les références que contient le dictionnaire et ça serait assez désastreux pour le bon déroulement de ton programme.
    Surtout que pour apprendre à utiliser les classes, il y a plus simple ! Je sais pas, un mini jeu vidéo en console ça permet d'approcher toutes les facettes de la POO tout en restant relativement ludique !

    Bonne chance

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Darkemal Voir le message
    Tu devrais éviter d'utiliser globals(), on sait jamais en cas de fausse manœuvre tu peux supprimer toutes les références que contient le dictionnaire et ça serait assez désastreux pour le bon déroulement de ton programme.
    globals() n'est qu'un dictionnaire.
    Il est particulier puisque c'est là que sont rangées les variables "globales" mais ce ne sont que celles du module courant. Et un module dans son utilisation est proche d'une classe (on ne peut en hériter).

    Mon but est en fait d'apprendre l'utilisation des classes. Donc je me suis donné un exercice : Des tirages aléatoires de nombres, comme au loto. Préalablement, on demande à l'utilisateur combien de série de tirage il désire et combien de numéro tiré pour chaque série.
    En tout cas merci pour toutes ces réponses. L'utilisation de globals() me satisfait beaucoup
    Les classes sont d'abord des fabriques d'objets qui pourront avoir des attributs et des méthodes semblables.

    Fabriquer cette suite de tirages aléatoires se réduit à l'appel d'une fonction tirage(n) qui retournera une liste de n nombres aléatoires.
    C'est bien car il faut bien commencer par les fonctions.
    Mais bien trop simple pour apprendre à utiliser les classes.

    Au cas où le tutoriel est quand même le chemin le plus indiqué pour débuter en faisant le tour de Python.
    Vous faites comme vous voulez mais sans vision d'ensemble, vous risquez de perdre beaucoup de temps sur certains sujets. Non qu'ils sont difficiles, juste parce que vous n'avez pas encore les bases, les repères,... qui vous permettront de relativiser l'essentiel et l'important.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par roro34570 Voir le message
    Mon but est en fait d'apprendre l'utilisation des classes. Donc je me suis donné un exercice : Des tirages aléatoires de nombres, comme au loto. Préalablement, on demande à l'utilisateur combien de série de tirage il désire et combien de numéro tiré pour chaque série.
    Salut
    Comme le dit fred1599, plutôt que de faire un truc de ce style
    tirage1=...
    tirage2=...
    tirage3=...
    et créer une usine à gaz pour remplacer cette énumération par un élément créateur de nom de variable, autant passer par un tableau justement fait pour ça !!!
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tirage=[]
    for i in xrange(nb_tirage):
        tirage.append(fonction_qui_renvoie_une_liste_de_no())

    Ou, encore plus simplement
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    tirage=[fonction_qui_renvoie_une_liste_de_no() for i in xrange(nb_tirage)]

    Et ensuite, te suffit de demander tirage[x] quand tu veux accéder au tirage n° x...

    Citation Envoyé par roro34570 Voir le message
    En tout cas merci pour toutes ces réponses. L'utilisation de globals() me satisfait beaucoup
    Mouais. En effet pourquoi faire simple quand...
    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]

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Si le sujet est de faire des "class" plutôt qu'enfouir l'intention dans des index pourquoi ne pas écrire:
    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
    import random
    from pprint import pprint
     
    class Tirages(list):
     
         def add(self, count):
              self.append([ random.randint(0,100) for _ in range(count) ])
     
         def show(self):
              for x, e in enumerate(self, 1):
                   print ('Tirage.%d: ' % x, end='')
                   pprint(e)
     
         def __getitem__(self, x):
             return super().__getitem__(x - 1)
    Tirages collecte l'ensemble des tirages dans une liste.
    • On peut ajouter un tirage à "count" positions.
    • Récupérer le tirage n
    • afficher tous les tirages


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if __name__ == '__main__':
        tirages = Tirages()
        tirages.add(3)
        tirages.add(2)
        tirages.show()
        pprint(tirages[1])
    La sortie sera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Tirage.1: [6, 27, 87]
    Tirage.2: [48, 52]
    [6, 27, 87]
    Ce code contient pas mal de Pythonneries qu'un débutant mettra du temps à acquérir. Apprendre à transformer idées/concepts en "objets" construits à partir de briques de bases, c'est le voyage de l'apprenti en POO.
    (et oui on peut faire plus court et plus rapide, mais quelle importance?)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 10
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Juste un commentaire sur la génération d'un tirage : avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ random.randint(0,100) for _ in range(count) ]
    on n'est pas à l'abri de tirer 2 fois le même nombre. Il vaut mieux utiliser une autre fonction du module random :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    random.sample(range(1,50),6)
    renvoie 6 nombres tirés au hasard parmi les entiers de 1 à 49 inclus

  18. #18
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Bonne remarque.
    Patchons (ou more class features)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    V1 = Tirages(list):
     
    class Tirages(V1):
         _samples = range(1,50)
     
         def add(self, count):
              self.append(random.sample(self._samples, count))
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  19. #19
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2012
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Ok, merci à tous pour ces réponses. J'étais déjà sur le tutoriel de Gérard Swinnen, mais je voulais sortir un peu des sentiers battus En plus j'ai zappé les bibliothèques. Je vais y retourner en faisant les choses dans l'ordre.

Discussions similaires

  1. créer une liste à partir d'une suite définie par récurence
    Par carryPAR dans le forum Général Python
    Réponses: 5
    Dernier message: 02/03/2015, 10h33
  2. Editer liste a partir d'une string
    Par Nako_lito dans le forum Objective-C
    Réponses: 0
    Dernier message: 28/12/2012, 22h28
  3. [TINYXML] Créer un TiXmlDocument à partir d'une string
    Par lololeuleu dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 13/06/2007, 13h36
  4. [Vb.net] Comment faire une liste à partir d'une string
    Par NicoNGRI dans le forum ASP.NET
    Réponses: 1
    Dernier message: 25/10/2006, 14h15
  5. Réponses: 6
    Dernier message: 24/01/2005, 11h06

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