strings (II)Las listas y las cadenas de caracteres (strings) son dos tipos de objeto de los denominados secuencias.
Como tales, las listas y las cadenas de caracteres comparten varias funciones y métodos, aunque también tienen diferencias.
Las cadenas de caracteres son:
Las listas, por su parte, son:
En los iterables, se puede acceder a cualquiera de sus elementos mediante su índice, y a una porción, indicando un rango entre dos índices separado por dos puntos.
Por lo tanto, para las cadenas de caracteres son válidas las mismas operaciones de indexado y particionado vistas para las listas.
cadena = "En un lugar de la Mancha"
print(cadena)
cadena[0]
cadena[-1]
cadena[3:9]
cadena[4::2]
cadena[::-1]
+ : concatenación¶El operador + sirve para concatenar secuencias del mismo tipo, tanto cadenas como listas.
cadena = "foo" + "bar"
print(cadena)
lista = ['A', 1] + ['B', 2]
print(lista)
* : repetición¶linea = '-' * 80
print(linea)
lista_rep = ['A', 1] * 5
print(lista_rep)
len()¶Devuelve la longitud (cantidad de elementos) de una secuencia, tanto lista como cadena de caracteres.
lista_len = [1, 2, 3, 'A', 'B', 'C', [100, 'foo']]
cadena_len = "cadena de caracteres"
print(len(lista_len))
print(len(cadena_len))
min(), max()¶Estas funciones devuelven el mínimo y el máximo respectivamente, de una secuencia.
En las cadenas pueden aplicarse sin limitaciones, y devuelven el carácter con menor o mayor índice Unicode.
cadena_m = "TheQuickBrownFoxJumpsOverTheLazyDog"
print(min(cadena_m))
print(max(cadena_m))
En el caso de las listas, min() y max() sólo pueden aplicarse si la lista es homogénea.
lista_1 = [13, 23, 77, 9]
print(min(lista_1))
print(max(lista_1))
lista_2 = ['foo', 'bar', 'hola Python', 'zz']
print(min(lista_2))
print(max(lista_2))
Estas funciones no pueden operar sobre listas heterogéneas, que no son ordenables.
lista_3 = ['foo', 23, 11, 'bar']
print(max(lista_3))
sum()¶Esta función puede aplicarse solamente a listas homogéneas, y cuyos elementos sean todos de tipo numérico.
lista_4 = [1, 2, 3, 4]
print(sum(lista_4))
sorted()¶La función sorted() devuelve una lista ordenada de los elementos de la secuencia que recibe como argumento (lista o cadena). La secuencia original no es modificada.
lista = [23, 13, 7, 37]
lista_ordenada = sorted(lista)
print(lista_ordenada)
print(lista)
La función sorted() siempre devuelve una lista, aunque reciba como argumento una cadena de caracteres.
cadena = "asdlk"
print(sorted(cadena))
in¶El operador in verifica si un elemento pertenece a una secuencia (lista o cadena), y devuelve la variable booleana True or False correspondiente.
"o" in "foo"
"x" in "foo"
lista_a = [12, 32, 14]
12 in lista_a
13 in lista_a
Como se vio en la clase 3, el operador in también se utiliza para recorrer secuencias u otros objetos iterables, en los ciclos generados por un for.
for i in lista_a:
print(i)
not in¶Es el contrario de in, devuelve verdadero cuando un elemento no está en una secuencia.
"o" not in "foo"
"x" not in "foo"
Por ser secuencias mutables, las listas admiten operaciones que las modifican.
= asignación¶Mediante el operador de asignación, se puede modificar el elemento correspondiente a un índice determinado.
mi_lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(mi_lista)
mi_lista[0] = "A"
print(mi_lista)
También se puede reemplazar una serie de elementos, especificando un rango de índices.
mi_lista[0:3] = "B"
print(mi_lista)
mi_lista[0:1] = [0, 1, 2]
print(mi_lista)
mi_lista[-1:] = ['A', 'B']
print(mi_lista)
del¶Con el operador del se pueden eliminar elementos o porciones de una lista, dando respectivamente su índice o un rango entre índices.
mi_lista = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(mi_lista)
del(mi_lista[0])
print(mi_lista)
del(mi_lista[7:])
print(mi_lista)
del(mi_lista[0:5:2])
print(mi_lista)
Los métodos son funciones que se aplican a un determinado tipo de objeto. La sintaxis general es:
nombre_de_objeto.metodo()
El método append() agrega un elemento al final de una lista.
mi_lista = [0, 1, 2, 3, 4]
print(mi_lista)
mi_lista.append(5)
print(mi_lista)
Con el método append() solo se puede agregar un único elemento.
mi_lista.append(6,7)
Se puede agregar un iterable, pero como un único elemento.
mi_lista.append([6, 7])
print(mi_lista)
.extend()¶La función extend() extiende una lista, agregando al final todos los elementos de un iterable.
mi_lista = [0, 1, 2]
print(mi_lista)
mi_lista.extend([3, 4, 5])
print(mi_lista)
mi_lista.extend(range(6,9))
print(mi_lista)
.sort()¶Ordena los elementos de una lista.
mi_lista = [4, 7, 5, 2, 11, 6]
print(mi_lista)
mi_lista.sort()
print(mi_lista) # la lista está ahora ordenada
La función sort() admite la opción reverse, que por defecto tiene el valor False.
De tener valor True, el ordenamiento se hace en sentido inverso.
otra_lista = [13, 5, 17, 9, 11, 6]
print(otra_lista)
otra_lista.sort(reverse=True)
print(otra_lista)
.reverse()¶Invierte el orden de los elementos de una lista.
mi_lista = [4, 7, 5, 2, 11, 6]
print(mi_lista)
mi_lista.reverse()
print(mi_lista)
.count()¶Esta función recibe un elemento como argumento, y cuenta la cantidad de veces que aparece en la lista.
lista = [3, 5, 11, 13, 5, 7, 3, 5]
print("11 -> ", lista.count(11))
print("5 -> ", lista.count(5))
print("9 -> ", lista.count(9))
9 in lista
.index()¶Recibe un elemento como argumento, y devuelve el índice de su primera aparición en la lista.
lista = [3, 5, 11, 13, 5, 7, 3, 5]
print(lista.index(5))
La función admite como argumento adicional un índice inicial a partir de donde comenzar la búsqueda, opcionalmente también el índice final.
lista = [3, 5, 11, 13, 5, 7, 3, 5]
print(lista.index(5, 3))
La función devuelve un error si el elemento no se encuentra en la lista, o en el entorno definido.
lista = [3, 5, 11, 13, 5, 7, 3, 5]
print(lista.index(9))
.insert()¶Por medio de la función .insert() se puede insertar un elemento en una lista. Se invoca de esta manera:
Inserta el elemento x en la lista, en el índice i.
lista = [3, 5, 11, 13, 5, 7, 3, 5]
lista.insert(2, "foo")
print(lista)
.remove()¶Recibe como argumento un elemento, y borra su primera aparición en la lista.
lista = [3, 5, 11, 13, 5, 7, 3, 5]
lista.remove(5)
print(lista)
Devuelve un error si el elemento no se encuentra en la lista.
.pop()¶Devuelve el último elemento de la lista, y lo borra de la misma.
lista = [3, 5, 11, 13, 5, 7, 3, 5]
print(lista.pop())
print(lista)
Opcionalmente puede recibir un argumento numérico, que funciona como índice del elemento (por defecto, -1)
lista = [3, 5, 11, 13, 5, 7, 3, 5]
print(lista.pop(2))
print(lista)
Hay múltiples maneras de definir (crear) una lista:
lista_extension = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(lista_extension)
list() de un iterable. Por ejemplo, la lista anterior podría crearse mediante la función range(10):lista_list = list(range(10))
print(lista_list)
Como argumento de la función list(), se puede usar cualquier objeto iterable, por ejemplo una cadena.
lista_list = list("Hola, Python")
print(lista_list)
.append, dentro de un bucle while o for:lista_loop = []
for i in range(10):
lista_loop.append(i)
print(lista_loop)
lista_comprension = [x for x in range(10)]
print(lista_comprension)
La forma general de la definición de una lista por comprensión es:
[*expresión* for *ítem* in *iterable*]Opcionalmente, se puede incluir un condicional en la expresión:
[*expresión* for *ítem* in *iterable* if *condición*]range(), etc.La salida siempre es una lista.
# crea una lista de números por extensión
numeros = [23, 7, 11, 41, 13, 38]
# eleva al cuadrado los números de la listas que sean menores que 20
# y crea una nueva lista
cuadrados = [x**2 for x in numeros if x < 20]
print(cuadrados)
cadena = "Hola Python"
lista = [x*2 for x in cadena if x != " "]
print(lista)