Forum Programmation.python problèmes en python

Posté par . Licence CC by-sa
Tags : aucun
-3
12
jan.
2017

bonjour,
voila je débute et en python et j' ai quelques souci avec un exercice, l'exercice est le suivant:
Le dictionnaire contenu dans le fichier dico,txt n'a aucun mot accentué;Cependant il a été constitué a partir de mot avec accent.Des lors,il contient des "doublons". Par exemple le mot réformer et reformer sont tous deux écrit reformer`

Je dois concevoir un programme qui a 2 contraintes:
-Lire le fichier dico.txt et créer le fichier dico_sans_doublons.txt
-Pour chaque mot lu dans le dictionnaire d'origine.Le programme doit écrire ce mot dans le fichier dico_sans_doublons.txt a condition que ce mot ne soit pas déjà présent!
je sait comment faire pour la première contraintes mais je suis bloque pour la deuxième si vous pourriez m'aider svp.

  • # list

    Posté par . Évalué à 2.

    def dedoublonne(dico):
        output = []
        for item in dico:
            if item not in output:
                output.append(item)
        return output
    ```Et voila...
    
    • [^] # Re: list

      Posté par . Évalué à 2. Dernière modification le 12/01/17 à 19:25.

      Ca devrait être plus rapide avec un set plutôt qu'une liste. En effet, la complexité d'un not in est O(n) pour une liste et O(1) pour un set.

      def dedoublonne(dico):
          output = set()
          for item in dico:
              if item not in output:
                  output.append(item)
          return output
      

      Pour la complexité algorithmique des différentes méthodes pour les différentes structure de données, j'ai trouvé ça: https://wiki.python.org/moin/TimeComplexity

      • [^] # Re: list

        Posté par (page perso) . Évalué à 4.

        Voire:

        def dedoublonne(dico):
            return set(dico.iteritems())  # dico.items() en python 3

        PS: attention sur un set c'est add(), pas append().

        • [^] # Re: list

          Posté par (page perso) . Évalué à 2.

          Rah je suis fatigué désolé:

          return set(dico.iterkeys()) # dico.keys()

          • [^] # Re: list

            Posté par (page perso) . Évalué à 2.

            Bon de toutes les façons c'est très bête ce que je dis, si dico est bien un 'dict', ses clés ne peuvent évidemment pas être dupliquées. Du coup "set(ton_iterable_avec_doublons)".

  • # Regarder les datastructures

    Posté par . Évalué à 2. Dernière modification le 12/01/17 à 19:07.

    Moi je passerai par les datastructures, c'est assez important de bien les connaitre. https://docs.python.org/3/tutorial/datastructures.html

    Je lirai les mots les uns après les autres et les mettrais dans un set, ensuite je parcours les éléments du set un par un et je l'écris dans dico_sans_doublons.txt.

    En effet, le set est une structure de données qui ne contient pas de doublons. Si tu lui ajoutes un objet qu'il connait déjà il va écraser l'ancien et n'en garder qu'un. Par contre il ne doit pas se souvenir de l'ordre d'insertion, je pense: c'est pas une liste.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.