Enrique López
¿Por qué no fuiste mi profesor de programación en la universidad?
La motivación introductoria me habría servido mucho en ese tiempo
Rhonal Velasco
Es verdad
Eduardo Flores
David es un profesor muy bueno y python mi lenguaje favorito
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.
¿Dónde encontrar respuestas y practicar más?
¿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]) # C print(Country[1]) # o print(Country[-1]) # a print(Country[-2]) # i print(len(Country)) # 8
Puntos finos para evitar errores.
¿Cómo indexar de atrás hacia adelante?
¿Cómo medir la longitud con Len?
¿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) # o print(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 distinta print(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 inicial country = country + "s" # "Méxicos" print(country) # Méxicos print(id(country)) # dirección cambió: nuevo objeto
Claves para interiorizar la inmutabilidad.
¿Qué experimento hiciste con strings e índices? Comparte en los comentarios tus pruebas, dudas o hallazgos para apoyar a la comunidad.
Enrique López
¿Por qué no fuiste mi profesor de programación en la universidad?
La motivación introductoria me habría servido mucho en ese tiempo
Rhonal Velasco
Es verdad
Eduardo Flores
David es un profesor muy bueno y python mi lenguaje favorito
Gabriel De Andrade
Lucas Ezequiel Veliz
Buen dato
Facundo Nicolás García Martoni
ProfesorExcepto 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()
Miguel Angel Sastoque
Carmen Sánchez Salgado
excelente aporte, gracias!
Marcelo Sebastián Núñez Arenas
Que buen aporte.
Arnaldo Guillen
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.
Sergio Rubiano
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.
Carlos Enrique Sánchez Martínez
Gracias!
Sergio Andres Gutierrez Zarate
Emilio Jesus Nuñez Pineda
Las explicaciones son muy sencillas. Se le desborda la pasion.
Aarón Espasandín
¿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)?:
def checkPalindrome(inputString): return inputString == inputString[::-1]
Ej. : "2002" o "abba" daría true y "abab" daría false
Nancy Zitle
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 :)
Enrique Alfaro Cubero
Iván Fernández
Muy bien explicado. EL curso va mejorando 😉
MIGUEL ECHAVARRI
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
Mario Fernando Izquierdo Chavarria
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.
Jeyson David Vargas Crespo
Hola, porque en Python es importante o para que me sirve saber los espacios en memoria???
Gracias por su ayuda..
rusbel bermúdez rivera
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.
Jeyson David Vargas Crespo
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???
Omar Daniel Centeno
⛓ 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. .
Cristian David Restrepo Marin
Muchas gracias por el aporte!
Japheth Calzada López
en que se ocuparia el lugar de memoria ???
Mario Fernando Izquierdo Chavarria
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:
Matias Molina
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 !!!!
Edwin Alfredo mejia pinto
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) 140204090128232 140204090128232
Andrés Gutiérrez Arcia
Si queremos reversar un string, con slicing es muy sencillo
a = 'Andres' print(a[::-1] # print 'serdnA'
Gustavo David Guillen Gutierrez
Que significa ::?
Angel Jimenez
sigan adelante se que al principio mientras mas aprendes mas te sientes perdido el truco es continuar ser constante y tu puedes soldado! yo se que puedes
Miguel Angel Reyes Moreno
El método id(objeto) nos regresa la dirección de memoria donde se encuentra un valor de Python.
Jorge Chaparro
muy buen apunte al manejo de memoria en python y su reutilización
Francisco Javier Pecino Leon
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] else print(f"{word_check} is not palindrome")
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"
Mutabilidad Inmutabilidad y Referencia **Mutables ** --> Listas Inmutables --> Int - String - tuplas
Los valores enteros, strings y las tuplas utilizan un espacio de memoria especifico.
>>> x=34 >>> y=x >>> print(x) 34 >>> print(y) 34 >>> x=10 >>> print(x) 10 >>> print(y) 34
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
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))
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)