Partage
  • Partager sur Facebook
  • Partager sur Twitter

recuperer un entier dans une chaine

Sujet résolu
    26 novembre 2010 à 12:01:10

    Salut :) ,

    J'aimerais pouvoir récupérer certaines valeurs qui sont stockées dans une chaîne de caractères, dans laquelle il y a des lettres aussi.
    Par exemple, j'ai la chaîne 'B 34 65', et je voudrais stocker le 34 et le 65 dans des variables de type int.
    J'ai deja essayé de copier la chaîne dans une liste, mais ca donne ['B', ' ', '3', '4', ' ', '6', '5']
    j'arrive a récupérer le 3 ou le 4 de 34, ms il n'y a-t-il pas un moyen de récupérer le nombre immédiatement ?

    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      26 novembre 2010 à 12:12:54

      Salut :)
      Je pense que la méthode split devrait faire ton bonheur.

      Ex:

      >>> a = 'B 34 65'
      >>> a.split()
      ['B', '34', '65']
      • Partager sur Facebook
      • Partager sur Twitter
        26 novembre 2010 à 12:17:14

        J'aurai pas dit mieux! :p
        Après tu n'as plus qu'à récupérer tes nombres grâce aux indices de la liste, et ensuite tu les transforme en int avec la fonction... int()!! :)

        Par exemple:

        chiffre = a[1]
        print int(chiffre)
        
        • Partager sur Facebook
        • Partager sur Twitter
          26 novembre 2010 à 12:22:34

          Merci beaucoup ca marche a merveille, sujet résolu !
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            26 novembre 2010 à 21:28:20

            Il y a aussi les regex simple d'utilisation

            import re # importation du module re
            string = 'B 34 65'
            nombres = re.findall("\d+", string) # recherche tous les décimals
            print nombres # ['34', '65']
            
            • Partager sur Facebook
            • Partager sur Twitter
              27 novembre 2010 à 0:25:32

              Mais c'est quand même beaucoup plus lent les regexp, et ça a une syntaxe assez bizarre pour un non-initié.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                27 novembre 2010 à 0:38:49

                Citation

                Mais c'est quand même beaucoup plus lent les regexp, et ça a une syntaxe assez bizarre pour un non-initié.



                Oui mais je ne cherche pas l'optimisation, simplement une autre solution existante.

                • Partager sur Facebook
                • Partager sur Twitter
                  27 novembre 2010 à 0:39:53

                  Histoire de faire un truc simple et rapide :
                  >>> a = 'B 34 65'
                  >>> def getIntegersFromString(string):
                  	returnvalue = []
                  	for x in string.split():
                  		try:
                  			returnvalue.append(int(x))
                  		except:
                  			pass
                  	return returnvalue
                  
                  >>> getIntegersFromString(a)
                  [34, 65]
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    27 novembre 2010 à 0:43:38

                    Citation

                    >>> a = 'B 34 65'
                    >>> def getIntegersFromString(string):
                    returnvalue = []
                    for x in string.split():
                    try:
                    returnvalue.append(int(x))
                    except:
                    pass
                    return returnvalue

                    >>> getIntegersFromString(a)
                    [34, 65]



                    Je préfèrerais utiliser isdigit() ou isinstance()
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 novembre 2010 à 0:53:14

                      +1 pour isdigit():



                      chaine = 'B 34 65'
                      listInt = [int(value) for value in chaine.split() if value.isdigit()]
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        27 novembre 2010 à 1:26:13

                        Je sais pas si c'est toi qui as écrit ce post sur Stack Overflow, mais comme je l'ai dit là-bas, je trouve que c'est plus simple (et plus complet) avec les regexp, ça permettrait de sélectionner des nombres dans la chaîne "43, bonjour 23." ou dans "abc54abc" (ou pas, au choix).
                        Côté vitesse, je doute que ce soit perceptible (et si c'était important, on n'utiliserait pas Python non plus), mais c'est vrai que ça peut être plus difficile à comprendre pour un non initié.

                        @fred1599 : Je comprends pas, comment ferais-tu avec isinstance ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          27 novembre 2010 à 8:42:03

                          Ah oui isdigit(), j'avais oublié ^^. Par contre avec isinstance() c'est pas possible, isinstance('45', int) retourne False vu que c'est un string.
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            27 novembre 2010 à 8:47:17

                            Citation

                            @fred1599 : Je comprends pas, comment ferais-tu avec isinstance ?



                            J'ai parlé trop vite, sorry

                            Je suis d'accord avec toi pour les regexp.

                            Marrant ce post que tu signales Fayden :lol:

                            • Partager sur Facebook
                            • Partager sur Twitter

                            recuperer un entier dans une chaine

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown