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 :

remplir une liste par les liste venant des itération différente , avec distinction


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut remplir une liste par les liste venant des itération différente , avec distinction
    salut,
    supposant j'ai 'n' iteration à partir de chaque itération je remplis une liste , je fait le clear pour faire la distinction entre les éléments venu de i, et le copy pour sauvegarder ce que je vais perdre , le problème c'est que la résultat final est la dernière liste obtenu n fois .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i in liste:
        L.clear()
        L.append(elt)
        l1=L.copy()
        print (L)
        final.append(i,l1)

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    difficile à dire comme ça, à quoi correspond elt ? ça ne devrait pas plutôt être i ?

    j'ai par ailleurs du mal à comprendre ce que tu cherches à faire et l'impression que ton code est inutilement compliqué

    tu pourrais donner un exemple concret de données en entrée et le résultat attendu ?

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Ton code est absolument incompréhensible. On ne sait pas ce qu'est elt, pourquoi le clear() dans la boucle (donc boucler n fois et à chaque fois effacer la liste pour y mettre ce "elt" qui n'a jamais changé ) , pourquoi copier L et append() qui est appelé avec 2 arguments alors qu'il n'en veut qu'un seul.

    Sans déconner, chaque fois que tu viens c'est la même chose. Tu écris des instructions Python qui n'ont ni queue ni tête, tu changes de besoin au fil du temps et tu ne donnes même pas les infos complètes de ce que tu veux. Alors ok au début on voulait bien admettre que tu débutais mais ce début c'était en mars 2019. Là 18 mois plus tard tu continues à coder du Python n'importe comment. J'ai vraiment l'impression que tu te fouts de nous.
    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]

  4. #4
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Ton code est absolument incompréhensible. On ne sait pas ce qu'est elt, pourquoi le clear() dans la boucle (donc boucler n fois et à chaque fois effacer la liste pour y mettre ce "elt" qui n'a jamais changé ) , pourquoi copier L et append() qui est appelé avec 2 arguments alors qu'il n'en veut qu'un seul.

    Sans déconner, chaque fois que tu viens c'est la même chose. Tu écris des instructions Python qui n'ont ni queue ni tête, tu changes de besoin au fil du temps et tu ne donnes même pas les infos complètes de ce que tu veux. Alors ok au début on voulait bien admettre que tu débutais mais ce début c'était en mars 2019. Là 18 mois plus tard tu continues à coder du Python n'importe comment. J'ai vraiment l'impression que tu te fouts de nous.

    que des préjugés

  5. #5
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    salut,

    difficile à dire comme ça, à quoi correspond elt ? ça ne devrait pas plutôt être i ?

    j'ai par ailleurs du mal à comprendre ce que tu cherches à faire et l'impression que ton code est inutilement compliqué

    tu pourrais donner un exemple concret de données en entrée et le résultat attendu ?

    oui peut être parce-que mon code est trop compliqué j'essaie de réduire le problème au maximum les éléments sont , des liste, liste de tuple , tuple..... est à chwaque itération on extrait des éléments différents ,
    donc le code c'est comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for i in Source_Cpus:
       final_migratory_tasks.clear()
       final_migratory_tasks.append(elt)
       final_final_migratory_tasks=final_migratory_tasks.copy()
       final_migratory_tasks_per_source.append(i, final_migratory_tasks)
       print ("final_migratory_tasks du proc" , str(i) , final_migratory_tasks)
       print ("final_migratory_tasks_per_source" , str(i) ,  final_migratory_tasks_per_source)
    print (" all final_migratory_tasks_per_source" , str(i) , final_final_migratory_tasks)
    comme exemple:
    final_migratory_tasks du proc 1 [5, (['14'], 'thread')]
    final_migratory_tasks_per_source[1, (['14'], 'thread')]

    final_migratory_tasks_per_source 2 [(2, [5,[3,8], (['1'], 'thread')]),[[7]]]
    final_migratory_tasks_per_source [2, ([(2, [5,[3,8], (['1'], 'thread')]),[[7]]])]

    le résultat souhaité au final est :
    all final_migratory_tasks_per_source [1, (['14'], 'thread')],2, ([(2, [5,[3,8], (['1'], 'thread')]),[[7]]])]

    alors que ça donne que la résultat dudernière itération en nombre d'itération copie
    final_migratory_tasks_per_source [2, ([(2, [5,[3,8], (['1'], 'thread')]),[[7]]]),2, ([(2, [5,[3,8], (['1'], 'thread')]),[[7]]])]
    c'est pourquoi j'ai fait le copy pour récupérer le contenu

  6. #6
    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 FATENMRABET Voir le message
    oui peut être parce-que mon code est trop compliqué j'essaie de réduire le problème au maximum les éléments sont , des liste, liste de tuple , tuple..... est à chwaque itération on extrait des éléments différents
    Si vous commenciez par exposer le problème à résoudre et à l'illustrer par quelques exemples montrant de quoi on part et ce qu'on cherche à obtenir...

    Là avec juste un bout de code qu'on ne peut pas exécuter et qui, en première lecture, ne peut pas fonctionner... impossible de vous aider.

    Et comme vous êtes multirécidiviste dans le genre, à part vous secouer un peu pour que vous compreniez qu'on ne peut pas vous aider dans ces conditions...

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

  7. #7
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Si vous commenciez par exposer le problème à résoudre et à l'illustrer par quelques exemples montrant de quoi on part et ce qu'on cherche à obtenir...

    Là avec juste un bout de code qu'on ne peut pas exécuter et qui, en première lecture, ne peut pas fonctionner... impossible de vous aider.

    Et comme vous êtes multirécidiviste dans le genre, à part vous secouer un peu pour que vous compreniez qu'on ne peut pas vous aider dans ces conditions...

    - W
    ok merci

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par FATENMRABET Voir le message
    que des préjugés
    Absolument pas. Un préjugé est une opinion préconçue. Moi j'ai donné des affirmations basées sur les absurdités que tu as écrites ici (après-tout, ce append() débile, ce clear() à chaque itération et ce "elt" inexistant c'est pas moi qui les ai inventés), et sur toutes les autres que tu écris depuis 18 mois.

    Citation Envoyé par FATENMRABET Voir le message
    Citation Envoyé par wiztricks Voir le message
    Et comme vous êtes multirécidiviste dans le genre, à part vous secouer un peu pour que vous compreniez qu'on ne peut pas vous aider dans ces conditions...
    ok merci
    Ah. De ma part quand je te dis que tu écris n'importe quoi et que c'est habituel c'est un préjugé mais quand wiztricks dit la même chose lui tu le remercies. Ok, je vois le genre...
    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]

  9. #9
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 921
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par FATENMRABET Voir le message
    salut,
    supposant j'ai 'n' iteration à partir de chaque itération je remplis une liste , je fait le clear pour faire la distinction entre les éléments venu de i, et le copy pour sauvegarder ce que je vais perdre , le problème c'est que la résultat final est la dernière liste obtenu n fois .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i in liste:
        L.clear()
        L.append(elt)
        l1=L.copy()
        print (L)
        final.append(i,l1)
    Bonjour,
    Si j'ai compris la demande:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    l = []
    lcopy = []
    for i in range(10):
        l.clear()
        l.append(i)
        lcopy.append(l[:])
    print(lcopy)
    Pour eviter les effets bords entre tes listes, il faut travailler sur une copie de ta liste l[:]

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Pour eviter les effets bords entre tes listes, il faut travailler sur une copie de ta liste l[:]
    Ou plus simplement éviter cette liste intermédiaire totalement absurde qui, à chaque itération, ne contient qu'un élément !!!
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    lcopy = []
    for i in range(10):
        lcopy.append([i,])
    print(lcopy)

    Ce qui ouvre alors la voie vers les listes en intension...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    lcopy=[[i,] for i in range(10)]
    print(lcopy)
    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]

  11. #11
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 921
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ou plus simplement éviter cette liste intermédiaire totalement absurde qui, à chaque itération, ne contient qu'un élément !!!
    Je pense que le PO a tenté à travers un code minimal montrer sa problèmatique, qui serait celle de la gestion des effets de bords lors de la copie d'objet mutable( enfin je l'imagine)...

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Je pense que le PO a tenté à travers un code minimal montrer sa problèmatique, qui serait celle de la gestion des effets de bords lors de la copie d'objet mutable( enfin je l'imagine)...
    Une bien piètre tentative alors avec ce code tellement minimaliste et tellement foiré qu'il est inutilisable en l'état et où cette problématique, même sur un code rectifié, n'apparaitra pas puisque le PO a utilisé copy()
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    a=[1, 2, 3]
    b=a
    b.append("toto")
    print(a, id(a))
    print(b, id(b))

    Et donc les différentes façon de résoudre le souci (dont ta remarque avec le slice fait partie ainsi que la méthode copy())
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a=[1, 2, 3]
    b=a[:]
    c=list(a)
    d=a.copy()
    b.append("pim")
    c.append("pam")
    d.append("poum")
    print(a, id(a))
    print(b, id(b))
    print(c, id(c))
    print(d, id(d))
    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]

  13. #13
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    Je pense que le PO a tenté à travers un code minimal montrer sa problèmatique, qui serait celle de la gestion des effets de bords lors de la copie d'objet mutable( enfin je l'imagine)...
    ce que j'ai voulu est que à chaque itération je distingue les éléments venu de chaque itération et à la fin construire une structure globale ayant tout les éléments distinct de chaque itération, j'ai juste éliminer le clear et récuperer la structure final. merci beaucoup votre code était utile , bein juste le slice et le copy j'arrive pas à bien distinguer la différence normalement les 2 donne de nouveau rference à des nouveau objet non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    l = []
    lcopy = []
    for i in range(10):
        #l.clear()
        l.append(i)
        lcopy.append(l[:])
        print(i,l)
    print(lcopy)

  14. #14
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 921
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par FATENMRABET Voir le message
    normalement les 2 donne de nouveau rference à des nouveau objet non?
    oui.

  15. #15
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    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 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par FATENMRABET Voir le message
    bein juste le slice et le copy j'arrive pas à bien distinguer la différence
    Parce qu'il n'y en a pas. Le slice est un opérateur Python tandis que le copy() est une méthode de l'objet "list" mais les deux résultats sont visuellement équivalents => création d'une nouvelle référence. Fatalement l'un des deux doit être plus rapide que l'autre mais j'ai jamais fait de tests pour regarder.

    [edit]Bon, je viens de faire un petit test rapide et il semble que la méthode basée sur list() soit la plus rapide
    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
    from time import time
    import random
     
    def timereps(reps, func, *args):
    	start = time()
    	for i in range(reps): r=func(*args)
    	end = time()
    	return (r, end - start)
    # def timereps
     
    def cop1(l): return ("slice", l[:])
    def cop2(l): return ("method", l.copy())
    def cop3(l): return ("list", list(l))
     
    random.seed()
    a=list(range(1000000))
    for f in random.sample((cop1, cop2, cop3), 3):			# Pour appeler les 3 fonctions dans un ordre aléatoire
    	r=timereps(10000, f, a)
    	print("%s: %s" % (r[0][0], r[1]))

    Et le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    slice: 67.2080409526825
    list: 61.38530492782593
    method: 67.28856992721558
    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. [PowerShell] Création d'un tableau et remplir une colonne par les valeurs d'un fichier
    Par Francky_bullet dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 22/03/2018, 14h14
  2. Afficher une liste dans des pages différentes
    Par B.M.W83 dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 05/01/2018, 16h53
  3. Réponses: 1
    Dernier message: 08/08/2012, 14h52
  4. Réponses: 5
    Dernier message: 05/04/2012, 22h06
  5. Réponses: 6
    Dernier message: 21/07/2008, 11h21

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