Aprende a trabajar con strings en Python con confianza: índices que empiezan en cero, longitud con la función global Len, acceso por posiciones negativas, el error off by one y la inmutabilidad respaldada por la función ID para observar la dirección de memoria. Practica en el intérprete y, ante dudas, desarrolla la habilidad de buscar respuestas en GitHub, StackOverflow y Google.
¿Qué son las strings en Python y por qué importan?
Las strings (cadenas) son secuencias de caracteres. A diferencia de los booleanos, enteros o floats, permiten acceder a cada carácter con un índice. También es posible conocer su longitud con la función global Len, una de las built in functions mencionadas. Además, las cadenas son inmutables: al “modificarlas”, se crea un nuevo objeto en memoria.
Ideas clave.
Son secuencias de caracteres accesibles por índice.
La longitud se obtiene con la función global Len.
Son inmutables: cualquier cambio crea un nuevo objeto.
Python reutiliza letras para optimizar memoria.
Pueden ir desde Hello world hasta textos enormes, si hay memoria suficiente.
¿Dónde encontrar respuestas y practicar más?
Usa el sistema de comentarios para dudas puntuales.
Desarrolla la habilidad de buscar tus propias respuestas.
Consulta GitHub, StackOverflow y Google.
Practica en el intérprete con ejemplos breves.
¿Cómo funcionan los índices, la longitud y el error off by one?
En programación, se cuenta desde cero al acceder por índice. También puedes contar desde el final con índices negativos. Al medir longitud, se habla del número total de caracteres. Esta diferencia entre contar desde cero (índices) y “desde uno” (longitud) origina el error frecuente off by one.
Ejemplo con Country = "Colombia".
Country ="Colombia"print(Country[0])# Cprint(Country[1])# oprint(Country[-1])# aprint(Country[-2])# iprint(len(Country))# 8
Puntos finos para evitar errores.
Acceso por índice: empieza en cero.
Índices negativos: -1 es el último carácter.
Longitud: número total de caracteres.
Error off by one: cuidar “límite superior” al usar índices.
¿Cómo indexar de atrás hacia adelante?
Usa -1 para el último carácter.
Usa -2 para el penúltimo, y así sucesivamente.
Útil para leer sufijos o el final de una cadena.
¿Cómo medir la longitud con Len?
Emplea la función global Len para conocer cuántos caracteres hay.
En código de Python, usa len(cadena) para obtener el entero.
¿Por qué las strings son inmutables y cómo se ve en memoria?
Modificar una cadena crea un nuevo objeto en memoria. Puedes observarlo con la función ID, que muestra un número que representa la dirección de memoria. Python también reutiliza letras: dos variables con el mismo carácter pueden apuntar a la misma dirección. Además, una letra mayúscula y su versión minúscula son caracteres distintos y viven en direcciones distintas.
Comportamiento de memoria con caracteres.
Country ="Colombia"letra = Country[1]# "o"print(letra)# oprint(id(letra))# dirección de memoria de "o"other_var ="o"print(id(other_var))# misma dirección de memoria que "o"print(id("i"))# dirección distintaprint(id("C"))# dirección para "C"print(id("c"))# dirección distinta para "c"
Inmutabilidad al “modificar” una cadena.
country ="México"print(id(country))# dirección inicialcountry = country +"s"# "Méxicos"print(country)# Méxicosprint(id(country))# dirección cambió: nuevo objeto
Claves para interiorizar la inmutabilidad.
Cambiar una cadena genera un nuevo objeto.
ID distinto implica objeto distinto en memoria.
Python reutiliza letras para ahorrar memoria.
Mayúsculas y minúsculas son caracteres diferentes.
¿Qué experimento hiciste con strings e índices? Comparte en los comentarios tus pruebas, dudas o hallazgos para apoyar a la comunidad.
¿Por qué no fuiste mi profesor de programación en la universidad?
La motivación introductoria me habría servido mucho en ese tiempo
Es verdad
David es un profesor muy bueno y python mi lenguaje favorito
Cabe destacar que los Strings con dobles comillas pueden contener cualquier caracter dentro de ellos sin necesidad de utilizar barra diagonal, Por ejemplo:
variable ='I\'m Gabriel'
sería lo mismo que:
variable ="I'm Gabriel"
Buen dato
Excepto que pongas una doble comilla dentro de ese string, tendrías que escaparla igualmente:
a ="Mi perro se llama \"Platzi\""
Mi código comentado de este ejercicio, espero les sirva 😎👍
"""
En python las cadenas(strings), son secuencias a las que se pueden
acceder a través de un índice
cadena ="manzana"cadena[0]="m"El índice de la primera letra es 0, en la programación se empieza a contar desde 0"""
country ="México"indice_country = country[1]print("country[1] = ", indice_country)print("El caracter en el espacio 1 es la letra 'é' ya que se comienza a contar desde 0 ")print("Por lo cual")indice_country = country[0]print("country[0] = ",indice_country )print('*'*52)print('Para conocer la longitud de un string se usa la función len()')longitud_country =len('México')print('En este caso al ejecutar la función len("México") sabemos que la cadena tiene una longitud de', longitud_country)print('En este caso si se empieza a contar desde 1')"""
Algo importante a tener en cuenta cuando hablamos de strings
es que estos son inmutables, esto significa que cada vez que modificamos uno estamos generando un nuevo objeto en memoria."""
print('*'*52)print("Para conocer el espacio de memoria en donde se almacena una variable")print("Se ejecuta la funcion id()")country ="México"id_country =id(country)print("Por ejemplo el string 'México' se almacena en la dirección: ", id_country)country ="Mexico"id_country =id(country)print("El string 'Mexico' se almacena en la dirección: ", id_country)country ="Canada"id_country =id(country)print("El string 'Canada' se almacena en la dirección: ", id_country)input()
Podrias usar los comentarios dentro de la linea de codigo:
Escribiendo el símbolo almohadilla delante de la línea de texto donde está el comentario.
Escribiendo triple comilla doble (“””) al principio y al final del comentario (que puede ocupar más de una línea).
# Este es un comentario en python
>>> comando_python1
>>> comando_python2 # Esto también es un comentario
# Este es otro comentario en python
# aunque lo hemos escrito en dos lineas
""" Este es un comentario multilinea.Lasiguiente parte realiza una serie
de cosas muy chulas """
>>> comando_chulo_python1
>>> comando_chulo_python2```
Mutabilidad Inmutabilidad y Referencia
**Mutables ** --> Listas
Inmutables --> Int - String - tuplas
Los valores enteros, strings y las tuplas utilizan un espacio de memoria especifico.
Las listas funcionan como un apuntador en memoria, entonces cuando se asigna una nueva variable a la lista, se referencia al mismo apuntador. Las dos variables tienen el mismo espacio de memoria - "Son la misma variable". Termina siendo un Puntero de la variable.
>>> x=[1,2,3,4]>>> y=x
>>>print(y)[1,2,3,4]>>> x[0]=5>>>print(y)[5,2,3,4]>>> y is x
True>>>id(x)2600461917256>>>id(y)2600461917256
excelente aporte, gracias!
Que buen aporte.
Además de ser un gran profesor, dice una gran verdad respecto a Platzi, a diferencias de seguir otros curso tutoriales en YouTube, acá los alumnos son pieza clave del aprendizaje, ya que ellos dan datos interesantes y además te ayudan con las dudas que tienes.
es importante que tengan tambien presente la representación el codigo de caracteres,
cuando el profesor dice que es diferente una variable minuscula y una mayuscula, es por que el codigo ascii interviene y lo almacena diferente, chequen la siguiente imagen.
Gracias!
Hay que aclarar que Python3 esta en una codificación más avanzada que el estandar ASCII, que es el estandar Unicode bajo el esquema UTF-8. El estandar Unicode permite extender el número de símbolos que se pueden utilizar dentro de Python, incluyendo letras del alfabeto griego, árabe o cirílico entre otros. Para ver una tabla de caracteres Unicode el enlace es el siguiente:
Si se desea aplicar en Python se puede introducir con la función chr(). Un ejemplo para ejecutarlo en la terminal de Python:
print(chr(0x03a8)+', '+chr(0x03a9))
Las explicaciones son muy sencillas. Se le desborda la pasion.
¿Cuál sería una función para checkear que un string es un palindromo ( se lee igual de adelante hacia atrás que de atrás hacia adelante)?:
Ej. : "2002" o "abba" daría true y "abab" daría false
Hola Espasa, la otra vez hice un video de como hacer un palíndromo con Javascript, el lenguaje es diferente pero la lógica en teoría es la misma, te dejo el link y espero te sirva de ayuda.
https://www.youtube.com/watch?v=WBz23Uii0E0
Saludos :)
def know_if_word_is_polidromo(word):if(word[::-1]== word):print('The word is polindromo')else:print('the word isn\'t polindromo')def _print_welcome():print('Welcome to Example')print('Write the word for the test')if __name__ =='__main__':_print_welcome() word =input()know_if_word_is_polindromo(word)
Muy bien explicado. EL curso va mejorando 😉
Hola David,
¿Podrías poner un ejemplo de para que sería útil la función Id() en un caso real? ¿Sería para temas de perfomance de la aplicación?
Muchas gracias
Hola, creo que (aunque no se usa mucho que digamos) sería útil principalmente para evidenciar si al afectar una variable, otra también sufre cambios. Te pongo el siguiente caso usando listas:
lista1 = [1, 2, 3]
lista2 = lista1
En ese momento, tanto lista1 como lista2 ocupan el mismo lugar de memoria, y si altero a lista1, utilizando algo como lista1[0] = 0, resulta que la lista2 también fue afectada y al imprimirla también me mostrará [0, 2, 3] a pesar de que en el código sólo se reasignó un valor a lista1. En cambio si importamos la librería copy, y hacemos algo como:
lista2 = copy.copy(lista1)
La función copy está creando un nuevo objeto, ocupando un nuevo espacio en memoria, y cuando hagamos algo como lista1[0] = 5, podrás imprimir la lista 1 y mostrará [5, 2, 3] pero la lista 2 seguirá mostrando [0, 2, 3] porque al no ocupar el mismo espacio en memoria, no fue afectada. Un posible uso de la función id sería haber comparado los id de ambas listas cuando se hizo una sola asignación y cuando se hizo una copia con la función copy, y saber así de antemano si ambas listas serán afectadas o solo una de ellas.
Hola, porque en Python es importante o para que me sirve saber los espacios en memoria???
Gracias por su ayuda..
En Python (y en otros lenguajes como Java, C# etc), no es la declaración de la variable la que reserva memoria. Una variable, desde el punto de vista del programador, no ocupa memoria. Lo que ocupa memoria es el objeto al que apunta.
Si has visita ese infinito pozo de conocimiento "Stack Overflow" literalmente es desbordamiento de memoria, este fenómeno presenta cuando una variables imagina un ciclo while escribiendo (o mas adelante si te gusta la inteligencia artificial) llega a ser tan masiva en cantidad de datos que tu proceso termina al no tener espacio en ram hacia donde crecer, parece increible pero cuando entrenas modelos de machine learning 16gb de ram pueden ser consumidos en pocos minutos dependiendo de la cantidad de datos que pases al modelo.
Ok, gracias por tu respuesta, pero me queda la duda en Python para que debo tener en cuenta el ID de la memoria o no es relevante???
⛓ Strings en Python 🐍
.
Excelente manera de iniciar con el tema de los Strings que me parece es muy importante conocer la manera de manipularlos pues. Conocer los métodos que se pueden aplicar te ayudará a ahorrarte mucho tiempo.
.
Muchas gracias por el aporte!
en que se ocuparia el lugar de memoria ???
No se utiliza mucho realmente, y menos con strings. Cuando utilizas otro tipo de objetos y otro tipo de funciones te puede dar una idea de si dos variables están siendo afectadas al mismo tiempo o por separado, según si tienen igual o diferente lugar de memoria.
Aquí hay un ejemplo muy interesante usando la librería copy:
Este capitulo estuvo genial , muy bien explicado ... Al final que habla luego de sumarle un caracter al string cambia el numero de id , creo que tiene que ver con la suma que hace la UAL de la compu para poder ejecutar esa instrucción pero bueno eso ya es un tema de otro lado y se va por las nubes :) yo lo vi el año pasado en la facultad en la materia SIstemas de Computación I y II en donde empece a programar en ASSEMBLER. (lo sé es una locura) ajajaja ! muchas gracias por la info !!!!
cada caracter tienen una direccion propia , los strings forman direcciones nuevas ovbiamente por la combinacion y reutilizacion de caracteres
>>> a ='CCCCCC'; b ='CCCCCCCC'>>> d = a[-1]; v = b[-2]>>>id(d);id(v)140204090128232140204090128232
Si queremos reversar un string, con slicing es muy sencillo
El método id(objeto) nos regresa la dirección de memoria donde se encuentra un valor de Python.
muy buen apunte al manejo de memoria en python y su reutilización
Funcion palindromo en una linea
word_check =input('Insert the word to check: ')print(f"{word_check} is palindrome")if word_check == word_check[::-1]elseprint(f"{word_check} is not palindrome")