Hay muchos tipos de objetos dentro de los lenguajes de programación, y Python no es la excepción, por el contrario, es un lenguaje sumamente robusto, pero para la Inteligencia Artificial y el Machine Learning hay un grupo de objetos que son mas importantes que otros, y de eso se trata este post, de poder entender y conocer los diferentes tipos de objetos con los que vamos a poder procesar bloques de información para posteriormente analizarla.
Dicho lo anterior comencemos por conocer las principales caracteristicas y diferencias que existen entre las Listas, las Tuplas y los Conjuntos en Python.
Table of Contents
Listas
La lista es un valor que contiene múltiples valores en una secuencia ordenada.
El termino list value, se refiere a una lista misma (que es un valor que se puede almacenar en una variable o pasarse a una función como cualquier otro valor, no los valores dentro de ella.
Un list value se ve así: [‘gato’,’murcielago’,’rata’,’elefante’*]. Así como los valores de cadena se escriben con comillas para marcar dónde la cadena comienza y termina, una lista comienza con un corchete de apertura y termina con un corchete de cierre.
Los valores dentro de la lista también se llaman items. Los items se separan con comas, siendo que son delimitados por comas.
Ejemplos:
x = [1,2,3]
y = [‘ratón’,’elefante’,’gato’,’perro’]
print(x) # [1, 2, 3]
print(y) # [‘ratón’, ‘elefante’, ‘gato’, ‘perro’]
lista=[‘hola’,3.1516,’agua’,11,True,None]
print(lista) # [‘hola’, 3.1516, ‘agua’, 11, True, None]
z=[‘hola’,5.1,8,True,False,’python’,[1,2,3]]
print(z) # [‘hola’, 5.1, 8, True, False, ‘python’, [1, 2, 3]]
Cuando se desea conocer un ítem en particular de una lista, se requiere utilizar su índice, el cual comienza en 0
Veamos el acceso por índice del ítem.
#acceso por indices
print(x[1]) # 2
print(y[3]) # perro
print(z[6]) # [1, 2, 3]
Veamos algunos otros ejemplos:
#Acceso por Rangos
#Si se quiere ir directamente a la ultima posición de la lista se puede usar -1
print(z[3:6]) # [True, False, ‘python’]
print(lista[3:6]) # [11, True, None]
print(z[3:]) # [True, False, ‘python’, [1, 2, 3]]
print(z[:5]) # [‘hola’, 5.1, 8, True, False]
print(z[-1]) # [1, 2, 3]
print(lista[-1]) # None
print(z[-3]) # False
print(lista[-3]) # 11
Podemos concatenar ítems de las listas haciendo uso de sus índices:
#concatenacion
frase = ‘El ‘ + y[1] + ‘ es gris como el ‘ + y[0]
print(frase) # El elefante es gris como el ratón
Pero no solo es posible concatenar un ítem de la lista con otra cadena de texto, también se pueden concatenar dos listas con la siguiente sintaxis:
#concatenar listas
concatenada = y + z
print(concatenada) # [‘ratón’, ‘elefante’, ‘gato’, ‘perro’, ‘hola’, 5.1, 8, True, False, ‘python’, [1, 2, 3]]
También es posible tener listas de listas, como por ejemplo:
#Ejercicio con listas de listas
#[[‘raton’, ‘elefante’, ‘gato’, ‘perro’], [1, 2, 3]]
lv = [y,x]
print(lv) # [[‘ratón’, ‘elefante’, ‘gato’, ‘perro’], [1, 2, 3]]
print(lv[0]) # [‘ratón’, ‘elefante’, ‘gato’, ‘perro’]
print(lv[1]) # [1, 2, 3]
print(lv[0][1]) # elefante
print(lv[1][2]) # 3
Existen algunas otras operaciones que son posibles con una Lista, y que son de mucha utilidad.
#Buscar la posicion de un indice dentro de una lista
print(y.index(‘gato’)) # 2
#Buscar cuantas veces aparece un valor dentro de una lista
print(x.count(1)) # 1
#Remover un elemento de la lista, pero solo la primer coincidencia con REMOVE
y.remove(‘elefante’)
print(y) # [‘ratón’, ‘gato’, ‘perro’, [‘hola’, 5.1, 8, True, False, ‘python’, [1, 2, 3]]]
#Invertir orden de la lista
x.reverse()
print(x) # [3, 2, 1]
#insertar un elemento en una posicion especifica de la lista
x.insert(0, 0)
print(x) # [0, 3, 2, 1]
x.insert(2,4)
print(x) # [0, 3, 4, 2, 1]
#Ordenar listas
x.sort(key=None, reverse=False)
print(x) # [0, 1, 2, 3, 4]
x.sort(reverse=True)
print(x) # [4, 3, 2, 1, 0]
Por otro lado también existen funciones que bajo ciertas condiciones, pueden ser usadas con Listas:
#Longitud de una funcion
tamano = len(x)
print(tamano) # 3
#Para listas homogeneas la funcion minimo y maximo pueden funcionar
print(min(x)) # 1
print(max(x)) # 3
#SUM puede sumar toda una lista si esta es numerica y homogenea
print(sum(x)) # 6
#reasignaciones en una lista
x[1] = 5
print(x) # [3, 5, 1]
Tuplas
Las tuplas son objetos de tipo secuencia, específicamente es un tipo de dato lista inmutable.
Esta no puede modificarse de ningún modo después de su creación.
Para crear una tupla se usan los caracteres ()
tupla1 = (1,2,3)
print(tupla1) # (1, 2, 3)
De igual forma como ocurrio con las Listas, para el caso de las Tuplas es igualmente posible hacer un acceso a la información de los ítems, por sus índices y se puede hacer uso de rangos.
#Indexacion
print(tupla1[:2]) # (1, 2)
print(tupla2[1:]) # (‘b’, ‘c’)
print(tupla4[1:4]) # (2, 3, 1)
print(tupla4[2]) # 3
print(tupla3[-1]) # c
Para realizar la concatenación de dos o mas tuplas el procedimiento es parecido con las Listas
#Concatenar
tupla2 = (‘a’,’b’,’c’)
tupla3 = tupla1 + tupla2
print(tupla3) # (1, 2, 3, ‘a’, ‘b’, ‘c’)
#Multiplicacion de tuplas
tupla4 = tupla1 * 2
print(tupla4) # (1, 2, 3, 1, 2, 3)
#Operadores de pertenencia
print(2 in tupla4) # true
print(4 in tupla4) # false
print(4 not in tupla4) # true
Al igual que con las Listas, hay funciones que son adecuadas para las Tuplas.
#Tamaño
ltup = len(tupla1)
print(ltup) # 3
#minimo y maximo
print(min(tupla1)) # 1
print(max(tupla1)) # 3
#suma
print(sum(tupla1)) # 6
#Ordenado
print(sorted(tupla1)) # [1, 2, 3]
print(sorted(tupla1,reverse=True)) # [3, 2, 1]
Esto les parecerá un poco contradictorio, ya que habíamos comentado que una Tupla no se puede modificar después de haber sido creada, sin embargo se darán cuenta de que como tal no es una modificación a la misma, más bien es la creación de una nueva que aunque podría reemplazar la anterior, es algo que eventualmente podría requerirse.
#Como modificar una tupla?
#Primero convertirla a LISTA
L5 = list(tupla4)
print(L5) # [1, 2, 3, 1, 2, 3]
#Hacemos el cambio
L5[-1] = 6
print(L5) # [1, 2, 3, 1, 2, 6]
#Volver a convertir en tupla
tupla6 = tuple(L5)
print(tupla6) # (1, 2, 3, 1, 2, 6)
En el caso de Enumerate se tienen dos tipos de funciones, la primera esta relacionada con obtener el numero de indice asociado a cada elemento de la tupla, mientras que por otro lado se le puede indicar a partir de que numero se desea iniciar el indexado dentro de la tupla, veamos unos ejemplos:
#ENUMERATE
#Devuelve el indice de cada uno de los elementos
print(list(enumerate(tupla6))) # [(0, 1), (1, 2), (2, 3), (3, 1), (4, 2), (5, 6)]
#Se puede usar ENUMERATE para iniciar la lista en una posicion especifica
pokemon = (‘Zubat’,’Golbat’,’Oddish’,’Gloom’)
print(pokemon) # (‘Zubat’, ‘Golbat’, ‘Oddish’, ‘Gloom’)
print(list(enumerate(pokemon,41))) # [(41, ‘Zubat’), (42, ‘Golbat’), (43, ‘Oddish’), (44, ‘Gloom’)]
pokedex = list(enumerate(pokemon,41))
print(pokedex) # [(41, ‘Zubat’), (42, ‘Golbat’), (43, ‘Oddish’), (44, ‘Gloom’)]
Conjuntos
Un conjunto es una colección no ordenada de objetos únicos.
- Para crear un conjunto se especifica sus elementos entre llaves.
- Al igual que otras colecciones, sus miembros pueden ser de diversos tipos.
- No obstante un conjunto no puede incluir objetos mutables como listas, diccionarios e incluso otros conjuntos.
Esta es la forma en la que se declaran este tipo de objetos, se usan {} para definir un conjunto, o también se puede hacer uso de la función SET.
s1={1,2,3,3,3}
print(s1) #{1, 2, 3}
#Los conjuntos no soportan elementos duplicados en caso de haberlos los simplifica
l1 = [4,5,6,7,7]
s2 = set(l1)
print(s2) #{4, 5, 6, 7}
s3 = set(s2)
print(s3) #{4, 5, 6, 7}
t1 = (7,8,9)
s3 = set(t1)
print(s3) #{8, 9, 7}
NOTA: Otra característica importante de los conjuntos es que estos no mantienen elementos duplicados, en caso de existir los unifica y considera como uno mismo.
Debajo veremos algunos de los métodos mas representativos y útiles que pueden requerirse cuando se trabaja con conjuntos.
#Metodo Add, agrega elemntos a un conjunto
s3.add(10)
print(s3) # {8, 9, 10, 7}
#Declaracion de un conjunto vacio
s4 = set()
s4.add(‘hola’)
s4.add(‘mundo’)
print(s4) # {‘hola’, ‘mundo’}
#metodo dicard, va a borrar el elemento que se desea
s3.discard(7)
print(s3) # {8, 9, 10}
#metodo copy, crea una copia de un conjunto
s4Copy = s4.copy()
print(s4Copy) # {‘hola’, ‘mundo’}
#metodo clear, limpia todo el conjunto y lo vuelve vacio
s4Copy.clear()
print(s4Copy) # set()
#Comparacion de conjuntos, isdisjoint, permite conocer si los dos conjuntos que se estan comparando estan desarticulados o no
print(s1) # {1, 2, 3}
print(s2) # {4, 5, 6, 7}
print(s1.isdisjoint(s2)) # True
#Conjunto es un subconjunto o superconjunto
s5 = {‘hola’,’como’,’esta’,’el’,’mundo’}
print(s5) # {‘como’, ‘esta’, ‘hola’, ‘mundo’, ‘el’}
print(s4) # {‘hola’, ‘mundo’}
print(s4.issubset(s5)) # True
print(s5.issubset(s4)) # False
print(s5.issuperset(s4)) # True
print(s4.issuperset(s5)) # False
Sea el texto siguiente, diga cuantas palabras únicas contiene:
“Pepe Pecas pica papas, con un pico, con un pico pica papas Pepe Pecas”
Respuesta: numero de palabras únicas igual a 7
Solución:
#Eliminar palabras repetidas y contar palabras únicas
texto=”Pepe Pecas pica papas con un pico con un pico pica papas Pepe Pecas”
#convertir todo a minusculas
textomin = texto.lower()
#convertir la cadena en lista
listatext = textomin.split(” “)
#convertir a conjunto
conjunto = set(listatext)
#Imprimir conjunto con palabras unicas
print(conjunto) # {‘papas’, ‘pepe’, ‘un’, ‘pecas’, ‘con’, ‘pico’, ‘pica’}
#contar las palabras unicas dentro del conjunto
print(len(conjunto)) # 7
Por ahora estos son los objetos que quería mostrarles, como comente al principio nos van a permitir trabajar con bloques de información cuando estemos procesando orígenes de datos.
Dejare para una siguiente publicación temas relacionados a Diccionarios y Arrays, que sin duda son otro par de objetos que nos serán de mucha utilidad en el análisis de información.