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 :

Récupérer des inclusions en python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Par défaut Récupérer des inclusions en python
    Bonjour à tous,

    je suis nouveau dans le monde de Python et je commence mes premiers scripts. Il s'avère que je suis bloqué sur une problématique assez simple, je pense qu'une notion a dû m'échapper

    Je travail sur un fichier texte qui contient 3 colonnes, la première contient une position de début, la seconde une position de fin, et enfin la troisième un identifiant, du genre :

    12___15____Laurent
    14___15___Michel
    25___32___Toto
    27___31___Loïc
    (mon fichier ne contient pas d'underscore c'était juste pour séparer les données)

    J'essaie de regrouper ensemble tous les IDs qui sont inclus les uns dans les autres, par exemple Michel dans Laurent () ou encore Loïc dans Toto.
    Je voudrai par exemple écrire dans un fichier de sortie :

    12___15____Laurent, Michel
    25___32___Toto, Loïc
    Niveau algo ça va, je regarde une colonne (par exemple la première, et si je trouve une position de début supérieure ou égale à cette position ET une position de fin inférieure ou égale, alors je suis bien dans le cas d'une inclusion.

    Ce que je n'arrive pas à faire c'est comparer entre eux les éléments d'une même liste, voila ce que j'ai fais: j'ai lu mon fichier et j'ai mis dans 3 listes différentes mes 3 colonnes.

    J'arrive à parcourir ma liste contenant mes positions de début mais je n'arrive pas à comparer les élements entre eux (sont'ils égaux etc...).

    Peut être auriez vous une idée quant à la marche à suivre.

    Cordialement,

    Michel

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    En fait tes valeurs sont des ranges, si je comprends bien.

    Si tu en fais des set(), tu peux les comparer directement entre eux

    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
     
    >>> a = set(range(10, 16))
    >>> b = set(range(12, 15))
    >>> c = set(range(11, 20))
    >>> a > b
    True
    >>> a > c
    False
    >>> b > a
    False
    >>> b > c
    False
    >>> b <= a
    True
    >>> b <= c
    True
    Voir les opérations de comparaison ici:
    http://docs.python.org/library/stdty...et#comparisons

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Par défaut
    Bonjour,

    merci pour votre aide je vais étudier cette solution !

    J'ai regardé le lien, je connais ces opérateurs, mais il m'est impossible de faire quelque chose comme ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i in debut:
          if i == i :
                 ...
    Je ne peux pas comparer directement les élements d'une même liste entre eux, enfin je ne crois pas. Je vais étudier la fonction set merci à vous !

  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,

    Ça ressemble à un tableau de présence: qui était dans cette salle en même temps que... ?

    Voilà une solution possible:

    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
    L = [[12, 15, "Laurent"],
         [14, 15, "Michel"],
         [25, 32, "Toto"],
         [27, 31, "Loïc"]]
     
    inclusions = []
    for i, liste in enumerate(L):
        deb, fin, nom = liste
        for j, liste2 in enumerate(L):
            if j!=i:
                deb2, fin2, nom2 = liste2
                if deb2>=deb and fin2<=fin:
                    inclusions.append([deb, fin, nom, nom2])
    print inclusions
    [[12, 15, 'Laurent', 'Michel'], [25, 32, 'Toto', u'Loïc']]

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Par défaut
    Merci beaucoup pour votre solution c'est tout à fait ce que je cherchais

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2012
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 73
    Par défaut
    Bonjour,

    pardonnez ma réponse tardive mais j'aurai voulu savoir si vous pouviez me détailler un peu votre code. Je pensais avoir compris la mécanique mais lorsque j'ai voulu le réutiliser dans un cas différent je n'arrivais pas à obtenir de résultats
    J'ai les mêmes fichiers d'entrées sauf que je n'ai pu de noms, juste les intervalles, j'ai donc enlevé les variables relatives aux noms dans le code, mais la liste que j'ai en retour est composée de tous les intervales de base en plusieurs exemplaires.

    Pour rappel je dispose de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [1,3],[2,4],[5,8],[5,12]...
    et j'aimerai obtenir cela:
    Merci à vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer des infos sur un fichier Python
    Par rambc dans le forum Général Python
    Réponses: 4
    Dernier message: 12/02/2009, 17h00
  2. Réponses: 8
    Dernier message: 23/01/2007, 21h02
  3. Python et MySQLdb : récupérer des données
    Par micatmidog dans le forum Bibliothèques tierces
    Réponses: 12
    Dernier message: 31/01/2006, 18h13
  4. Récupérer des données Excel vers Interbase ...
    Par Djedjeridoo dans le forum InterBase
    Réponses: 2
    Dernier message: 20/07/2003, 18h16
  5. cherche module ou langage pour récupérer des données audio..
    Par Ry_Yo dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 12/05/2003, 17h44

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