41 preguntas sobre manipulación de cadenas en Python

Comencé a mantener una lista de las funciones más utilizadas, resolviendo problemas algorítmicos en LeetCode y HackerRank.

Ser un buen programador no significa recordar todas las funciones integradas de un lenguaje determinado. Pero esto no significa que su memorización sea inútil. Especialmente, cuando se trata de prepararse para una entrevista.

Hoy quiero compartir con todos los que quieren mi hoja de trucos para trabajar con cadenas en Python. Lo diseñé como una lista de preguntas, que uso para la autoevaluación. Aunque estas preguntas no se basan en las tareas completas que se ofrecen en las entrevistas, su desarrollo lo ayudará a resolver problemas de programación reales.



1. ¿Cómo verificar la identidad de dos objetos?


El operador isregresa Truesi una referencia a la misma área de memoria se escribe en dos variables. De esto es de lo que estamos hablando cuando hablamos de la "identidad de los objetos".

No confundir isy ==. El operador ==verifica solo la igualdad de los objetos.

animals           = ['python','gopher']
more_animals      = animals
print(animals == more_animals) #=> True
print(animals is more_animals) #=> True
even_more_animals = ['python','gopher']
print(animals == even_more_animals) #=> True
print(animals is even_more_animals) #=> False

Presta atención al hecho de que animalsno son even_more_animalsidénticos, aunque son iguales entre sí.

Además, hay una función id()que devuelve el identificador de la dirección de memoria asociada con el nombre de la variable. Cuando se llama a esta función, se devolverá el mismo identificador para dos objetos idénticos.

name = 'object'
id(name)
#=> 4408718312

2. ¿Cómo verificar que cada palabra en una línea comience con una letra mayúscula?


Hay un método de cadena istitle()que verifica si cada palabra en una cadena comienza con una letra mayúscula.

print( 'The Hilton'.istitle() ) #=> True
print( 'The dog'.istitle() ) #=> False
print( 'sticky rice'.istitle() ) #=> False

3. ¿Cómo verificar una cadena para otra cadena?


Hay una declaración inque devolverá Truesi la cadena contiene la cadena de búsqueda.

print( 'plane' in 'The worlds fastest plane' ) #=> True
print( 'car' in 'The worlds fastest plane' ) #=> False

4. ¿Cómo encontrar el índice de la primera aparición de una subcadena en una cadena?


Hay dos métodos que devuelven el índice de la primera aparición de una subcadena en una cadena. Este es find()y index(). Cada uno de ellos tiene ciertas características.

El método find()regresa -1si no se encuentra la subcadena requerida en la cadena.

'The worlds fastest plane'.find('plane') #=> 19
'The worlds fastest plane'.find('car') #=> -1

Un método index()en tal situación arroja un error ValueError.

'The worlds fastest plane'.index('plane') #=> 19
'The worlds fastest plane'.index('car') #=> ValueError: substring not found

5. ¿Cómo contar el número de caracteres en una cadena?


La función len()devuelve la longitud de la cadena.

len('The first president of the organization..') #=> 41

6. ¿Cómo contar cuántas veces ocurre un determinado carácter en una cadena?


El método count()que devuelve el número de ocurrencias en la cadena del carácter especificado nos ayudará a responder esta pregunta .

'The first president of the organization..'.count('o') #=> 3

7. ¿Cómo hacer que el primer carácter de una cadena sea una letra mayúscula?


Para hacer esto, puede usar el método capitalize().

'florida dolphins'.capitalize() #=> 'Florida dolphins'

8. ¿Qué son las líneas f y cómo usarlas?


Python 3.6 presenta una nueva característica, las llamadas "cadenas f". Su uso simplifica enormemente la interpolación de cadenas. El uso de líneas f recuerda un método format().

Cuando se declaran líneas f, se escribe una letra antes de la comilla de apertura f.

name = 'Chris'
food = 'creme brulee'
f'Hello. My name is {name} and I like {food}.'
#=> 'Hello. My name is Chris and I like creme brulee'

9. ¿Cómo encontrar una subcadena en una parte determinada de una cadena?


Se index()puede invocar el método pasándole argumentos opcionales que representan el índice del fragmento inicial y final de la cadena, dentro del cual debe buscar una subcadena.

'the happiest person in the whole wide world.'.index('the',10,44)
#=> 23

Preste atención al hecho de que la construcción anterior vuelve 23, y no 0, por así decirlo, no limitaría nuestra búsqueda.

'the happiest person in the whole wide world.'.index('the')
#=> 0

10. ¿Cómo insertar el contenido de una variable en una cadena usando el método format ()?


El método le format()permite lograr resultados similares a los que se pueden obtener utilizando las líneas f. Es cierto que creo que no es format()tan conveniente de usar, ya que todas las variables tienen que especificarse como argumentos format().

difficulty = 'easy'
thing = 'exam'
'That {} was {}!'.format(thing, difficulty)
#=> 'That exam was easy!'

11. ¿Cómo sé si una cadena contiene solo números?


Hay un método isnumeric()que devuelve Truesi todos los caracteres de la cadena son números.

'80000'.isnumeric() #=> True

Con este método, tenga en cuenta que no cuenta los signos de puntuación como números.

'1.0'.isnumeric() #=> False

12. ¿Cómo dividir una cadena por un carácter dado?


Aquí seremos ayudados por un método split()que divide una cadena por un carácter dado o por varios caracteres.

'This is great'.split(' ')
#=> ['This', 'is', 'great']
'not--so--great'.split('--')
#=> ['not', 'so', 'great']

13. ¿Cómo verificar una cadena que está compuesta solo por letras minúsculas?


El método solo se islower()devuelve Truesi la cadena se compone únicamente de letras minúsculas.

'all lower case'.islower() #=> True
'not aLL lowercase'.islower() # False

14. ¿Cómo verificar que una cadena comienza con una letra minúscula?


Esto se puede hacer llamando al método anterior islower()para el primer carácter de la cadena.

'aPPLE'[0].islower() #=> True

15. ¿Es posible en Python agregar un número entero a una cadena?


Esto es posible en algunos idiomas, pero Python arrojará un error al intentar realizar una operación similar TypeError.

'Ten' + 10 #=> TypeError

16. ¿Cómo "voltear" una línea?


Para "voltear" una línea, puede dividirse presentándola como una lista de caracteres, "voltear" la lista y, combinando sus elementos, forma una nueva línea.

''.join(reversed("hello world"))
#=> 'dlrow olleh'

17. ¿Cómo combinar la lista de líneas en una línea, cuyos elementos están separados por guiones?


El método join()puede combinar elementos de lista en cadenas, separando cadenas individuales utilizando el carácter especificado.

'-'.join(['a','b','c'])
#=> 'a-b-c'

18. ¿Cómo sé que todos los caracteres de una cadena están en ASCII?


El método isascii()devuelve Truesi todos los caracteres de la cadena están en ASCII.

print( 'Â'.isascii() ) #=> False
print( 'A'.isascii() ) #=> True

19. ¿Cómo lanzar toda la cadena a mayúsculas o minúsculas?


Para resolver estos problemas, puede utilizar los métodos upper()y lower(), respectivamente, que conducen todos los caracteres de las cadenas a mayúsculas y minúsculas.

sentence = 'The Cat in the Hat'
sentence.upper() #=> 'THE CAT IN THE HAT'
sentence.lower() #=> 'the cat in the hat'

20. ¿Cómo convertir el primer y último carácter de una cadena a mayúsculas?


Aquí, como en uno de los ejemplos anteriores, nos referiremos a los caracteres de la cadena por índice. Las líneas en Python son inmutables, por lo que crearemos nuevas líneas basadas en las existentes.

animal = 'fish'
animal[0].upper() + animal[1:-1] + animal[-1].upper()
#=> 'FisH'

21. ¿Cómo verificar una cadena que está compuesta solo por letras mayúsculas?


Hay un método isupper()que es similar al ya considerado islower(). Pero solo se isupper()devuelve Truesi la cadena completa consta de letras mayúsculas.

'Toronto'.isupper() #=> False
'TORONTO'.isupper() #= True

22. ¿En qué situación usarías el método de splitlines ()?


El método splitlines()separa las cadenas por caracteres de salto de línea.

sentence = "It was a stormy night\nThe house creeked\nThe wind blew."
sentence.splitlines()
#=> ['It was a stormy night', 'The house creeked', 'The wind blew.']

23. ¿Cómo obtener un corte de línea?


Para obtener una porción de una cadena, se utiliza la siguiente sintaxis:

string[start_index:end_index:step]

Este stepes el paso con el que se devolverán los caracteres de cadena de un rango start_index:end_index. Un stepvalor de 3 indica que se devolverá cada tercer carácter.

string = 'I like to eat apples'
string[:6] #=> 'I like'
string[7:13] #=> 'to eat'
string[0:-1:2] #=> 'Ilk oetape' ( 2- )

24. ¿Cómo convertir un entero a una cadena?


Puede usar el constructor para convertir un número en una cadena str().

str(5) #=> '5'

25. ¿Cómo sé que una cadena contiene solo caracteres alfabéticos?


El método isalpha()devuelve Truesi todos los caracteres de la cadena son letras.

'One1'.isalpha() #=> False
'One'.isalpha() #=> True

26. ¿Cómo reemplazar todas las ocurrencias de una determinada subcadena en una línea dada?


Si no exporta un módulo que le permita trabajar con expresiones regulares, puede usar el método para resolver este problema replace().

sentence = 'Sally sells sea shells by the sea shore'
sentence.replace('sea', 'mountain')
#=> 'Sally sells mountain shells by the mountain shore'

27. ¿Cómo devolver un carácter de una línea con el código ASCII mínimo?


Si observa los códigos ASCII de los elementos, resulta, por ejemplo, que las letras mayúsculas tienen códigos más bajos que las minúsculas. La función min()devuelve el carácter de la cadena que tiene el código más pequeño.

min('strings') #=> 'g'

28. ¿Cómo verificar una cadena que contiene solo caracteres alfanuméricos?


Los caracteres alfanuméricos incluyen letras y números. Para responder esta pregunta, puede usar el método isalnum().

'Ten10'.isalnum() #=> True
'Ten10.'.isalnum() #=> False

29. ¿Cómo eliminar espacios desde el principio de una línea (desde su lado izquierdo), desde su extremo (desde el lado derecho) o en ambos lados de una línea?


Aquí, los métodos lstrip(), rstrip()y , respectivamente, son útiles para nosotros strip().

string = '  string of whitespace    '
string.lstrip() #=> 'string of whitespace    '
string.rstrip() #=> '  string of whitespace'
string.strip() #=> 'string of whitespace'

30. ¿Cómo verificar que una cadena comienza con una secuencia de caracteres dada o termina con una secuencia de caracteres dada?


Para responder a esta pregunta, puede recurrir, respectivamente, a los métodos startswith()y endswith().

city = 'New York'
city.startswith('New') #=> True
city.endswith('N') #=> False

31. ¿Cómo codificar una cadena en ASCII?


El método le encode()permite codificar cadenas utilizando la codificación especificada. Se utiliza la codificación predeterminada utf-8. Si un determinado carácter no puede representarse utilizando la codificación especificada, se generará un error UnicodeEncodeError.

'Fresh Tuna'.encode('ascii')
#=> b'Fresh Tuna'
'Fresh Tuna Â'.encode('ascii')
#=> UnicodeEncodeError: 'ascii' codec can't encode character '\xc2' in position 11: ordinal not in range(128)

32. ¿Cómo sé que una cadena incluye solo espacios?


Hay un método isspace()que devuelve Truesolo si la cadena consiste únicamente en espacios.

''.isspace() #=> False
' '.isspace() #=> True
'   '.isspace() #=> True
' the '.isspace() #=> False

33. ¿Qué sucede si multiplicas una fila por 3?


Se creará una nueva línea, que representa la línea original repetida tres veces.

'dog' * 3
# 'dogdogdog'

34. ¿Cómo hacer que el primer carácter de cada palabra en una cadena sea mayúscula?


Hay un método title()que pone en mayúscula la primera letra de cada palabra en una cadena.

'once upon a time'.title() #=> 'Once Upon A Time'

35. ¿Cómo combinar dos líneas?


Puede usar el operador para concatenar cadenas +.

'string one' + ' ' + 'string two' 
#=> 'string one string two'

36. ¿Cómo utilizar el método de partición ()?


El método partition()rompe la cadena por la subcadena dada. Después de eso, el resultado se devuelve como una tupla. Además, la subcadena a lo largo de la cual se realizó el desglose también se incluye en la tupla.

sentence = "If you want to be a ninja"
print(sentence.partition(' want '))
#=> ('If you', ' want ', 'to be a ninja')

37. Las líneas en Python son inmutables. Qué significa eso?


El hecho de que las cadenas sean inmutables sugiere que después de crear un objeto de cadena, no se puede cambiar. Al "modificar" cadenas, las cadenas originales no cambian. En cambio, se crean objetos completamente nuevos en la memoria. Puedes probar esto usando la función id().

proverb = 'Rise each day before the sun'
print( id(proverb) )
#=> 4441962336
proverb_two = 'Rise each day before the sun' + ' if its a weekday'
print( id(proverb_two) )
#=> 4442287440

Al concatenar 'Rise each day before the sun'y ' if its a weekday'en la memoria, se crea un nuevo objeto con un nuevo identificador. Si el objeto original cambiara, los objetos tendrían el mismo identificador.

38. Si declara la misma línea dos veces (escribiéndola en 2 variables diferentes), ¿cuántos objetos se crearán en la memoria? ¿1 o 2?


Un ejemplo de dicho trabajo con cadenas es el siguiente fragmento de código:

animal = 'dog'
pet = 'dog'

Con este enfoque, solo se crea un objeto en la memoria. Cuando me encontré con esto por primera vez, no me pareció intuitivo. Pero este mecanismo ayuda a Python a ahorrar memoria cuando se trabaja con cadenas largas.

Esto se puede probar recurriendo a una función id().

animal = 'dog'
print( id(animal) )
#=> 4441985688
pet = 'dog'
print( id(pet) )
#=> 4441985688

39. ¿Cómo usar los métodos maketrans () y translate ()?


El método le maketrans()permite describir la asignación de un carácter a otro, devolviendo una tabla de conversión.

El método le translate()permite aplicar la tabla especificada para convertir la cadena.

#  
mapping = str.maketrans("abcs", "123S")
#  
"abc are the first three letters".translate(mapping)
#=> '123 1re the firSt three letterS'

Tenga en cuenta que la barra está hecha de reemplazo de símbolos a, b, cy s, respectivamente, los símbolos 1, 2, 3y S.

40. ¿Cómo eliminar las vocales de una cuerda?


Una respuesta a esta pregunta es que los caracteres de una cadena se ordenan utilizando el mecanismo de comprensión de la lista. Los símbolos se verifican comparándolos con una tupla que contiene vocales. Si el carácter no está incluido en la tupla, se agrega a una nueva línea.

string = 'Hello 1 World 2'
vowels = ('a','e','i','o','u')
''.join([c for c in string if c not in vowels])
#=> 'Hll 1 Wrld 2'

41. ¿En qué situaciones utiliza el método rfind ()?


El método rfind()es similar al método find(), pero, a diferencia find(), escanea la cadena no de izquierda a derecha, sino de derecha a izquierda, devolviendo el índice de la primera aparición encontrada de la subcadena deseada.

story = 'The price is right said Bob. The price is right.'
story.rfind('is')
#=> 39

Resumen


A menudo le explico a un gerente de producto, una persona de edad avanzada, que los desarrolladores no son diccionarios que almacenan descripciones de métodos de objetos. Pero cuantos más métodos recuerde el desarrollador, menos tendrá que buscar en Google y más rápido y agradable será su trabajo. Espero que ahora pueda responder fácilmente las preguntas discutidas aquí.

¡Queridos lectores! ¿Qué pasa con el manejo de cadenas en Python? ¿Recomendaría a quienes se preparan para una entrevista?


All Articles