una separar por imprimir funcion eliminar contar comparar caracteres caracter cadenas cadena python numbers

separar - input python



Eliminando todos los caracteres no numéricos de la cadena en Python (6)

¿Cómo eliminamos todos los caracteres no numéricos de una cadena en Python?


El enfoque más rápido, si necesita realizar más de una o dos de esas operaciones de eliminación (o incluso solo una, pero en una cadena muy larga), es confiar en el método de translate de cadenas, aunque necesita algo de preparación. :

>>> import string >>> allchars = ''''.join(chr(i) for i in xrange(256)) >>> identity = string.maketrans('''', '''') >>> nondigits = allchars.translate(identity, string.digits) >>> s = ''abc123def456'' >>> s.translate(identity, nondigits) ''123456''

El método de translate es diferente, y tal vez un poco más simple de usar, en cadenas Unicode que en cadenas de bytes, por cierto:

>>> unondig = dict.fromkeys(xrange(65536)) >>> for x in string.digits: del unondig[ord(x)] ... >>> s = u''abc123def456'' >>> s.translate(unondig) u''123456''

Es posible que desee utilizar una clase de mapeo en lugar de una dicción real, especialmente si su cadena Unicode puede contener caracteres con valores ord muy altos (eso haría que el dic sea excesivamente grande ;-). Por ejemplo:

>>> class keeponly(object): ... def __init__(self, keep): ... self.keep = set(ord(c) for c in keep) ... def __getitem__(self, key): ... if key in self.keep: ... return key ... return None ... >>> s.translate(keeponly(string.digits)) u''123456'' >>>


Esto debería funcionar para cadenas y objetos Unicode:

# python <3.0 def only_numerics(seq): return filter(type(seq).isdigit, seq) # python ≥3.0 def only_numerics(seq): seq_type= type(seq) return seq_type().join(filter(seq_type.isdigit, seq))


No estoy seguro si esta es la forma más eficiente, pero:

>>> ''''.join(c for c in "abc123def456" if c.isdigit()) ''123456''

La parte ''''.join significa combinar todos los caracteres resultantes sin ningún carácter entre ellos. Luego, el resto es una lista de comprensión, donde (como probablemente puedas adivinar) solo tomamos las partes de la cadena que coinciden con la condición isdigit .


Solo para agregar otra opción a la mezcla, hay varias constantes útiles dentro del módulo de string . Si bien es más útil en otros casos, se pueden usar aquí.

>>> from string import digits >>> ''''.join(c for c in "abc123def456" if c in digits) ''123456''

Hay varias constantes en el módulo, que incluyen:

  • ascii_letters (abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ)
  • hexdigits (0123456789abcdefABCDEF)

Si está utilizando estas constantes en gran medida, puede valer la pena encubrirlas a un conjunto de frozenset . Eso habilita O (1) búsquedas, en lugar de O (n), donde n es la longitud de la constante para las cadenas originales.

>>> digits = frozenset(digits) >>> ''''.join(c for c in "abc123def456" if c in digits) ''123456''


>>> import re >>> re.sub("[^0-9]", "", "sdkjh987978asd098as0980a98sd") ''987978098098098''


user = (input): print ("hello")