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)