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 :

Calcul de liste (on dirait des matrices)


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Par défaut Calcul de liste (on dirait des matrices)
    Bonsoir,
    Je cherche à faire une opération sur les listes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    liste_couple=[("Old_A","New_A"),("Old_B","New_B"),("Old_C","New_C")]
    liste_2=[("Old_A","File1"),("Old_A","File10"),("Old_A","File20"),("Old_B","File2"),("Old_B","File20"),("Old_B","File40"),("Old_C","File2"),("Old_C","File10"),("Old_C","File40")]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #  le résultat doit donner :
    #  (("File1",("Old_A")),("File10",("Old_A","Old_C")),("File20",("Old_A","Old_B"),
    #    ("File2",("Old_B","Old_C")),("File40",("Old_B","Old_C")))
    J'ai cherché en vain à trouver une opération directe sur les listes.. sans succès...
    Si un expert a une piste
    Merci
    Jérôme

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    le résultat ressemble à un dictionnaire

  3. #3
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    le résultat ressemble à un dictionnaire
    mais en beaucoup moins pratique.

    C'est donc peut-être (sans doute) la constitution de l'actuelle liste qu'il faut revoir et la faire évoluer vers la céation/constitution d'un dictionnaire.

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je ne connais pas non plus une fonction qui fait ça toute seule (ce qui ne veut pas dire qu'il n'y en a pas!). Voilà 2 solutions possibles

    On part de:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l2=[("Old_A","File1"),("Old_A","File10"),("Old_A","File20"),("Old_B","File2"),("Old_B","File20"),("Old_B","File40"),("Old_C","File2"),("Old_C","File10"),("Old_C","File40")]
    Comme l'a dit josmiley, on peut utiliser un dictionnaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    d = {}
    for c, v in l2:
        if d.has_key(v):
            d[v].append(c)
        else:
            d[v] = [c]
    l3 = d.items()
     
    print l3
    [('File40', ['Old_B', 'Old_C']), ('File2', ['Old_B', 'Old_C']), ('File1', ['Old_A']), ('File10', ['Old_A', 'Old_C']), ('File20', ['Old_A', 'Old_B'])]
    Si on veut manipuler l3 par la suite, il vaut mieux convertir les tuples en listes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    l3 = [list(elem) for elem in d.items()]
    print l3
    [['File40', ['Old_B', 'Old_C']], ['File2', ['Old_B', 'Old_C']], ['File1', ['Old_A']], ['File10', ['Old_A', 'Old_C']], ['File20', ['Old_A', 'Old_B']]]
    L'inconvénient de passer par les dictionnaires est que l'ordre initial n'est pas conservé (sauf en passant par les dictionnaires ordonnés).


    La solution avec les listes est cependant possible, mais moins efficace à cause du test:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    l3 = []
    for c, v in l2:
        k = [i for i, (e1, e2) in enumerate(l3) if e1==v]
        if k!=[] :
            l3[k[0]][1].append(c)
        else:
            l3.append([v, [c]])
     
    print l3
    [['File1', ['Old_A']], ['File10', ['Old_A', 'Old_C']], ['File20', ['Old_A', 'Old_B']], ['File2', ['Old_B', 'Old_C']], ['File40', ['Old_B', 'Old_C']]]

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Par défaut
    Super merci !
    Grâce à vous je plonge toujours un peu plus dans la puissance de ce langage !
    Je vais m’imprégner de votre code qui va sensiblement améliorer mon script !
    Merci encore à tous ; contributeurs de la nuit et du petit matin
    Jérôme

Discussions similaires

  1. [Turbo Pascal] Unité Matrices : Gestion des matrices de taille quelconque afin d'effectuer du calcul numérique réel
    Par Eric Sigoillot dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 07/04/2014, 20h25
  2. [Débutant] calcul de modes propres et des matrices masse raideurs
    Par anita.crus dans le forum MATLAB
    Réponses: 47
    Dernier message: 17/02/2014, 16h33
  3. Calcul sur des matrices
    Par Ptinéwik dans le forum MATLAB
    Réponses: 2
    Dernier message: 21/01/2008, 10h37

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