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 :

correction script boucle for et while imbriquées : remplir une liste


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut correction script boucle for et while imbriquées : remplir une liste
    Bonjour,
    Dans le petit script suivant, je souhaite mettre à jour la liste "list_data" avec les valeurs de la liste "list_tot" qui n'existent pas déjà dans "list_data".
    Hélas, j'obtiens à la fin le résultat suivant pour la liste list_data :
    list_data=['c','e','f','a','b','c',...] => l'élément c est répété

    Je ne maitrise pas très bien les boucles for mais ce genre de script pour remplir des valeurs me serait très utile, pouvez-vous m'aider, voici le script tel que je l'ai créé:

    list_tot=['a','b','c','g']
    #liste à remplir avec des nouvelles valeurs de la liste_tot
    list_data=['c','e','f']
    #variable texte intermédiaire
    val_temp=''
    #ind= compteur pour boucle while
    ind=0
    for row in list_tot:
    ...while ind<len(list_data):
    ......if row==list_data[ind]:
    ............ind=len(list_data)
    ......else:
    ............ind=ind+1
    ...new_val=row
    ...list_data.append(new_val)
    ...ind=0

    Merci à vous

  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 690
    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 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par J_D_D_J Voir le message
    Bonjour,
    Dans le petit script suivant, je souhaite mettre à jour la liste "list_data" avec les valeurs de la liste "list_tot" qui n'existent pas déjà dans "list_data".
    Bonjour
    Code représentatif de l'algorithme correspondant
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for x in list_tot:
        if x not in list_data: list_data.append(x)

    En utilisant l'écriture de liste en intension: list_data.extend(x for x in list_tot if x not in list_data).
    Mais si "list_tot" contient par exemple ['f', 'f', 'f'] alors comme "f" n'est à l'origine pas présent dans "list_data", ils seront alors tous les trois recopiés (toutefois cela n'est pas contraire à ton besoin tel qu'il a été exprimé car ça correspond toujours à ta préposition "qui n'existent pas" sous-entendant "pour l'instant").

    Si maintenant il s'agit d'un oubli de ta part et que cela te gêne, alors la même écriture un poil modifiée: list_data.extend(x for x in set(list_tot) if x not in list_data) (le set(list_tot) créant une copie de "list_tot" sans doublon).

    Et si "list_data" ne contient aucun élément dupliqué: list_data=list(set(list_data) | set(list_tot)) ou bien list_data=list(set(list_data + list_tot)) (à voir lequel des deux sera le plus rapide car dans un cas chaque ensemble est transformé en type "set" pour pouvoir y appliquer une opération de filtrage tandis que dans l'autre il est d'abord concaténé puis transformé en "set" pour supprimer les doublons)

    Citation Envoyé par J_D_D_J Voir le message
    Je ne maitrise pas très bien les boucles
    Ca viendra...
    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
    Membre confirmé

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Points : 503
    Points
    503
    Billets dans le blog
    1
    Par défaut
    Salut.

    Cela se fait en une ligne avec python.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list_data.extend(n for n in list_tot if n not in list_data)
    Si tu as souvent besoin de faire ce genre de manipulations, tu peux événtuellement travailler avec des sets plutôt que des listes, les sets ne pouvant nativement contenir de doublons.
    Le temps ronge l'amour comme l'acide.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut test avec succès
    j'ai bien fait de vous solliciter c'est limpide
    j' aurai besoin de la méthode pour remplir des tables de données attributaires
    merci

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    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 690
    Points : 30 986
    Points
    30 986
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par J_D_D_J Voir le message
    j' aurai besoin de la méthode pour remplir des tables de données attributaires
    Là ça devient plus coton car le terme "tables" est assez généraliste (tables en bdd ? tables comme tableaux ? etc). Il faudrait un exemple de ce que tu as et ce que tu veux...
    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]

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Tables de données attributaires SIG à remplir
    J'ai été vague volontairement. En fait, je suis technicien SIG, je travaille sur arcgis qui a développé des modules python (arcpy) pour le traitement des données géographiques.
    Afin d'automatiser des tâches récurrentes, je me suis mis à Python et j'utilise maintenant régulièrement des curseurs pour parcourir les données attributaires des couches géographiques pour récupérer des valeurs ou en insérer de nouvelles.
    Comme tu as pu voir, je suis au début (mais j'avance), et je commence à voir certains procédés que je vais pouvoir utiliser régulièrement, dont l'exemple fourni est une illustration. Voilà un résumé,

    Je vais maintenant tester sur de la donnée géographique et je te fais un retour, je suis optimiste

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2014
    Messages : 4
    Points : 1
    Points
    1
    Par défaut remplir une liste => remplir donnée attributaire SIG
    Bonjour,

    J'ai testé avec succès le script pour remplir la table attributaire d'une couche SIG avec de nouvelles valeurs non présentes initialement dans la table (=> création d'un curseur)
    Merci de m'avoir orienté vers les sets plutôt que les listes, je ne connaissais pas

Discussions similaires

  1. optimiser une boucle while imbriquer dans une boucle for
    Par bakaratoun dans le forum MATLAB
    Réponses: 0
    Dernier message: 28/01/2010, 15h35
  2. Boucle For et While
    Par mairou dans le forum Débuter
    Réponses: 6
    Dernier message: 20/09/2008, 20h33
  3. Probleme dans une boucle while pour remplir une JTable
    Par sky88 dans le forum Composants
    Réponses: 3
    Dernier message: 27/03/2008, 14h01
  4. [Optimisation] Boucles for ou while et mysql_result ?
    Par sorenson dans le forum Langage
    Réponses: 5
    Dernier message: 22/12/2006, 09h55

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