Saltar al contenido

¿Cómo explicar la función str.maketrans en Python 3.6?

Hola, hallamos la solución a lo que necesitas, deslízate y la encontrarás más abajo.

Solución:

str.maketrans crea una tabla de traducción, que es una asignación de enteros o caracteres a enteros, cadenas o None. Piense en ello como un diccionario donde el keys representar caracteres en la entrada string y los valores que asignan para representar caracteres en la salida string.

pasamos por el string para traducir y reemplazar todo lo que aparece como un key en el mapeo con cualquiera que sea su valor en el mapa, o eliminarlo si ese valor es None.

Puede crear una tabla de traducción con uno, dos o tres argumentos (creo que esto puede ser lo que lo confunde). Con un argumento:

str.maketrans('a': 'b', 'c': None)

Le asigna a la función una asignación que sigue las reglas de las tablas de traducción y devuelve una tabla equivalente para esa asignación. Cosas que se asignan a None son removidos

Con dos argumentos:

str.maketrans('abc', 'xyz')

Le das dos cuerdas. Cada personaje en la primera string es reemplazado por el carácter en ese índice en el segundo string. Asi que 'a' mapas a 'x', 'b' para 'y'y 'c' para 'z'.

El que estás usando, con tres argumentos, funciona igual que dos argumentos, pero tiene un tercero string.

str.maketrans('abc', 'xyz', 'hij')

Esto es lo mismo que la versión de dos argumentos, excepto que los personajes de la tercera string se eliminan, como si estuvieran asignados a None. Entonces su tabla dice “No reemplace nada, pero elimine los caracteres que aparecen en este string”.

De la documentación sobre str.maketrans:

Si hay un tercer argumento, debe ser un stringcuyos caracteres se asignarán a None en el resultado.

Esto es lo que str.maketrans está haciendo; está tomando cada elemento en el tercer argumento y creando un mapa (un diccionario de Python) que mapea cada valor ordinal de los caracteres en el string para None:

>>> str.maketrans('', '', '0123456789') 
48: None,
 49: None,
 50: None,
 51: None,
 52: None,
 53: None,
 54: None,
 55: None,
 56: None,
 57: None

Si existen valores extra como el primer y segundo argumento, se agregan a esta asignación como caracteres adicionales para traducir (es por eso que el autor seleccionó '' y ''; no quiere que se traduzcan caracteres adicionales):

>>> str.maketrans('a', 'A', '0123456789') 
48: None,
 49: None,
 50: None,
 51: None,
 52: None,
 53: None,
 54: None,
 55: None,
 56: None,
 57: None,
 97: 65   # map ord('a') to ord('A')

Si aplicas esto a tu string ahora, también capitalizará 'athens' para 'Athens' debido al adicional 'a', 'A' hemos proporcionado a maketrans. No es la mejor de las traducciones, pero es suficiente para captar la funcionalidad.

str_obj.translate luego realizará búsquedas en este diccionario para cada carácter en str_obj reemplazando sus valores con los encontrados en el mapeo. Si no lo encuentra dentro del mapeo, lo deja como está, si es None lo elimina. Esto se indica en la documentación para str.translate:

Cuando está indexado por un ordinal Unicode (un número entero), el objeto de tabla puede realizar cualquiera de las siguientes acciones: devolver un ordinal Unicode o un stringpara asignar el carácter a uno o más caracteres; devolver Nonepara borrar el caracter del retorno string; o levantar un LookupError excepción, para mapear el carácter a sí mismo.

(Énfasis mío)

Acuérdate de que tienes permiso de explicar tu experiencia si diste con el arreglo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *