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 :

recherche dans une liste


Sujet :

Python

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut recherche dans une liste
    Bonjour,

    Dans une liste de N éléments, je souhaiterais rechercher la lettre "é" si un élément en comporte un quelque part le remplacer par "e".

    J'ai noté que la fonction upper() ne me permet pas de faire ce que j'ai besoin car le mot "évaluer" se transformerait en "éVALUER" !!!! ce qui me pause problème

    Merci

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Regarde du coter de replace.

    Bonne journée.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    J'ai testé avec un exemple simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    a="évasion"
     
    b= a.replace("é","e")
    print b
     
    evasion

    Dans cet example c'est facile c'est une recherche de chaine dans une variable, mais la apparemment on ne peux pas appliquer cette méthode dans une liste !!!

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Par défaut
    Salut,
    Il faut appliquer replace() à chaque chaîne de ta liste.
    La version version courte (grâce aux list comprehensions):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> a = ['salut', 'lés', 'copains']
    >>> b = [item.replace('é', 'e') for item in a]
    >>> b
    ['salut', 'les', 'copains']

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Une possibilité plus poussée utile à connaître

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    li = [ 'où sera-t-il tôt demain ?', 'au marché de L’Haÿ-les-Roses',
           'il eût fallu qu’il mangeât pour croître', 'çà et là',
           'il a des œdèmes éphémères', 'le coût est-il sûr ?' ]
     
    from string import maketrans
     
    table = maketrans('éèêëïîôœàâùûüÿç','eeeeiiooaauuuyc')
     
    print [ x.translate(table) for x in li ]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['ou sera-t-il tot demain ?', 'au marche de L\x92Hay-les-Roses', 'il eut fallu qu\x92il mangeat pour croitre', 'il a des odemes ephemeres', 'le cout est-il sur ?']

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Par défaut
    Bonjour,
    Du coup, on peut imaginer aussi conserver les accents (c'est à l'informatique de s'adapter aux accents et pas le contraire, n'est-ce-pas ?) et utiliser quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table = maketrans('éèêëïîôœàâùûüÿç','ÉÈÊË...')

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Par défaut et pouquoi pas l'unicode ?
    Aaaah mais je n'avais pas fait gaffe au problème initial !
    Si le but est de passer en uppercase en conservant les accents, alors il suffit de travailler sur une chaîne unicode !

    Python 2.6 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    >>> ch = u'éèêëïîôœàâùûüÿç'
    >>> print ch.upper()
    ÉÈÊËÏÎÔŒÀÂÙÛÜŸÇ

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 23
    Par défaut
    C'est beaucoup mieux en effet !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    Bonjour,

    Encore merci pour vos réponses.

    eyquem, pbernard , je test ca tout de suite c'est exactement ce qu'il me faut.



    Encore merci à la communauté.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    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
    17
    18
     
    from string import maketrans
     
    try:
    	filein=open('/home/x/Bureau/world_dico_smaller','r')
    except:
    	print "file no found"
    	exit()
     
    lignes=[l.rstrip('\r\n') for l in filein.readlines()]
    b = [item.replace('èéêëïîôàâùûüÿçô', 'eeeeiioaauuuyco') for item in lignes]
    fileout=open("noaccent_smaller","w")
     
    for i in b:
    	fileout.write("%s\n" % i)
     
    fileout.close()
    filein.close()
    Ne fonctionne pas, j'ai encore des "lé là é è" etc dans mon fichier noaccent!

    Je ne comprend pas.


    De plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> table = maketrans('éèêëïîôœàâùûüÿç','eeeeiiooaauuuyc')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: maketrans arguments must have same length
    maketrans renvoie une erreur !!
    Je craque sur ce truc aussi simple !!!

  11. #11
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Simplement tu n'as pas recopié exactement ce que t'as donné comme code eyquem. Tu aurais dû faire un copier coller.

    En fait on te dit qu'il n'y a pas la meme nombre de caractères de chaque côté.

    Chez moi cela fonctionne parfaitement.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    J'ai tenté avec un copier.coller, encore la même erreur, de plus pour simplifier voici le dernier test !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> table = maketrans('é','e')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: maketrans arguments must have same length
    ?

  13. #13
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Ah! et tu as bien fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from string import maketrans
    ???

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    Oui patron

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >>> from string import maketrans
    >>> table = maketrans('é','e')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: maketrans arguments must have same length
    >>>

  15. #15
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    C'est sans aucun doute un problème venant de chez toi, car ya pas de soucis chez moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> from string import maketrans
    >>> table = maketrans('éèêëïîôœàâùûüÿç','eeeeiiooaauuuyc')
    >>>

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    Alors orientons vers la solution replace() peuetre

  17. #17
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Quelle version de Python utilises-tu ?

    Fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print len('é'),len('e'),len('é')==len('e'),type('é'),type('e')
    stp

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 106
    Par défaut
    2.6.5 "une ) en trop à la fin"

    >>> print len('é'),len('e'),len('é')==len('e'),type('é'),type('e')
    2 1 False <type 'str'> <type 'str'>
    >>>


    oula !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    >>> len('é')==len('e')
    False
    >>>

  19. #19
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Bon, les chaînes ne sont pas unicode. Voilà déjà un point.





    Quelles sont les deux premières lignes de ton script ?
    Ce ne serait pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/usr/bin/python 
    # -*- coding: utf-8 -*-
    ?







    Dans
    http://www.developpez.net/forums/d95...s/#post5351628
    pbernard signale un manque d’espace
    mais quand j’exécute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/usr/bin/python 
    # -*- coding: utf-8 -*-  
    print '%-4s %-4s %-4s'%('a','b','c') 
    print '%-4s %-4s %-4s'%('â','b','c')
     
    print 'a b c','  \t',len('a b c')
    print 'â b c','  \t',len('â b c')
    j’obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    a    b    c   
    â   b    c   
    a b c    5
    â b c    6
    alors qu’en encoding cp1252 l’affichage est correct.



    J’utilise Python 2.7

Discussions similaires

  1. [VBA-Excel] Effectuer une recherche dans une liste view
    Par Miles Raymond dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/11/2006, 17h21
  2. Imposer une methode Equals pour une recherche dans une List
    Par petozak dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 03/10/2006, 10h41
  3. Réponses: 2
    Dernier message: 07/07/2006, 10h00
  4. Réponses: 2
    Dernier message: 10/10/2005, 02h25
  5. Recherche dans une liste non trié
    Par Oberown dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 13/09/2004, 13h56

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