Professional Documents
Culture Documents
>>> nombres = ['Andrés', 'Julián', 'Germán'] # empaquetado de tuplas. expresión arbitraria, incluyendo otra lista por compresión. Así, la lista por Un patrón común es ordenar objetos complejos usando algunos de los
>>> jefe, asesor, cliente = nombres # desempaquetado de secuencias. compresión anidada se evalúa en el contexto del for que lo sigue. índices del objeto como clave. Por ejemplo:
>>> print(asesor)
>>> matriz = [ >>> student = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
Julián
... [1, 2, 3, 4], >>> print(sorted(student, key=lambda student: student[2]))
>>> jefe, asesor, cliente = ['Andrés', 'Julián', 'Germán'] # asignación múltiple. ... [5, 6, 7, 8], [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> print(cliente) ... [9, 10, 11, 12],
Germán ... ] Python proporciona funciones de conveniencia para que las funciones de acceso
Listas por compresión # lista por compresión que transpone filas y columnas. sean más fáciles y rápidas. Así, el módulo Operator tiene las funciones
Una forma de crear listas de manera compacta es por medio de las listas por
>>> print([[fila[i] for fila in matriz] for i in range(4)]) itemgetter(), attrgetter() y methodcaller().
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
compresión. De esta forma, es posible crear una lista a partir de cualquier >>> from operator import itemgetter
elemento iterable (lista, tupla, string, etc.). El ejemplo anterior es equivalente a: >>> student = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
[<expresión que retorna> <cláusula for> <cláusula if - filtrado>] >>> transpuesta = [] >>> print(sorted(student, key=itemgetter(2))) # ordena según el elemento [2]
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> for i in range(4):
Se usan comúnmente para crear nuevas listas donde cada elemento es el >>> transpuesta.append([fila[i] for fila in matriz]) Las funciones del módulo operator permiten múltiples niveles de clasificación.
resultado de algunas operaciones aplicadas a cada miembro de otra >>> print(transpuesta) Por ejemplo, para ordenar por grado [1] y luego por edad [2]:
secuencia. [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
>>> print(sorted(student, key=itemgetter(1,2)))
# crea una lista de cuadrados Sin embargo, en el mundo real, es preferible utilizar funciones predefinidas en [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
>>> cuadrados = [x ** 2 for x in range(10)]
>>> print(cuadrados)
vez de declaraciones con flujo complejo. Así, la función zip(*itr) hace un buen
trabajo para este caso en concreto. Por otro lado, tanto list.sort(key=None, reverse=False) como sorted(itr,
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] key=None, reverse=False) aceptan un parámetro reverse con un valor
# combina los elementos de dos listas si no son iguales >>> print(list(zip(*matriz))) booleano. Se usa reverse=True para marcar un orden descendente.
>>> print([(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]) [(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)] >>> print(sorted(student, key=itemgetter(2), reverse=True))
Desempaquetando una lista de argumentos [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
# filtra la lista para excluir números negativos
>>> vec = [-4, -2, 0, 2, 4]
Cuando los argumentos ya están en una lista o tupla, pero necesitan ser
desempaquetados para llamar a una función que requiere argumentos Invertir el orden de una lista
>>> print([x for x in vec if x >= 0]) Para invertir el orden de una secuencia, se puede utilizar el método
[0, 2, 4] posicionalmente separados. Para esto se puede escribir la función con el
operador ( * ) para desempaquetar argumentos de una lista o tupla. list.reverse() el cual invierte los elementos de la lista (modifica la lista).
# aplica una función a todos los elementos También se puede invertir la lista utilizando slicing [::-1]. Mientras que la
>>> print([abs(x) for x in vec]) >>> print(list(range(3, 6))) # llamada a la función range() normal, con los función reversed(itr) crea un objeto reversed el cual se puede convertir a una
[4, 2, 0, 2, 4] [3, 4, 5] argumentos separados. lista.
>>> user = ['Juan', 'Alex', 'Ana'] >>> user = ['Juan', 'Alex', 'Ana'] >>> keys = ['alpha', 'beta', 'gamma'] Esta función puede parecer un bucle for, pero al ser una función incorporada,
>>> user.reverse() >>> print(list(reversed(user))) >>> values = [10, 20, 30] es más rápida.
>>> print(user) ['Ana', 'Alex', 'Juan'] >>> print(dict(zip(keys, values)))
['Ana', 'Alex', 'Juan'] {'alpha': 10, 'beta': 20, 'gamma': 30} # filtra los elementos cuyo módulo sea igual a cero.
# se puede combinar zip(*itr) con listas de compresión. >>> numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Valores máximos y mínimos de una lista >>> resultado = filter(lambda x: x % 2 == 0, numeros)
>>> name = ['Juan', 'Alex', 'Ana']
Las funciones max(itr[, default=obj, key=func]) y min(itr[, default=obj, >>> user = ['Juan01', 'Al3', 'Ana96']
>>> print(list(resultado))
key=func]) retornan el máximo y mínimo valor de una lista (itr). El segundo >>> age = [17, 20, 19]
[2, 4, 6, 8, 10]
argumento (default – opcional) es el valor que retorna en caso de que la lista >>> [print(x, y, z) for x, y, z in zip(name, user, age)] Reducir los valores de una lista a un solo valor
(itr) esté vacía, si no se especifica, lanza ValueError. El tercer argumento (key Juan Juan01 17
La función reduce(function, itr) del módulo functools como su nombre lo
– opcional) permite personalizar el orden de clasificación por medio de una Alex Al3 20
Ana Ana96 19 indica, reduce los valores de una lista (itr) a un solo valor, aplicando una función
función.
reductora (function). La función reductora debe tener dos argumentos.
# desempaquetando una lista de argumentos
>>> letras = ['c', 'b', 'Y', 'Z'] >>> letras = ['c', 'b', 'Y', 'Z'] >>> coordinate = ['x', 'y', 'z']
>>> print(min(letras)) >>> print(min(letras, key=str.lower)) >>> from functools import reduce
>>> value = [3, 4, 5, 0, 9]
Y b # suma los elementos de la lista entre sí.
>>> result = zip(coordinate, value)
>>> numeros = [1, 2, 3, 4, 5]
>>> lenguajes = ['python', 'lua', 'ruby'] >>> lenguajes = ['python', 'lua', 'ruby'] >>> resultList = list(result) >>> resultado = reduce(lambda x, y: x + y, numeros)
>>> print(max(lenguajes)) >>> print(max(lenguajes, key=len)) >>> print(resultList) >>> print(resultado)
ruby python [('x', 3), ('y', 4), ('z', 5)] 15
Función range([start], stop[, step]) – range(stop) >>> c, v = zip(*resultList) # la tendencia ahora es usar listas por compresión, dejando a un lado las funciones
Genera una objeto range inmutable de números enteros (int) en sucesión >>> print('c =', c) map() y filter(), y usando reduce() en casos muy aislados.
c = ('x', 'y', 'z')
aritmética, que van desde un inicio (start – opcional) que por defecto es cero,
Otros métodos y funciones para las listas
hasta un número final (stop) sin incluir este último. El tercer argumento (step – Además, si se tienen secuencias de diferente longitud, y se desea rellenar los
opcional) indica los saltos entre elementos (diferencia entre cada número de la espacios faltantes, se puede utilizar el método it.zip_longest(*itr, fillvalue=’ list.append(x) añade un elemento (x) al final de la lista. El ítem puede ser
secuencia). La función se suele usar para recorrer bucles for. Para ver los ’) del módulo itertools. cualquier tipo (número, string, iterable, etc.) Equivale a list[len(list):] = [x]
elementos, se debe convertir a list(). >>> numeros = [1, 2, 3, 4, 5] >>> numeros = [1, 2, 3, 4, 5]
>>> import itertools as it
>>> print(range(-1)) >>> print(type(range(1))) >>> numeros.append((6, 7, 8)) >>> numeros[4:] = [(6, 7, 8)]
>>> name = ('Juan', 'Alex', 'Ana', 'Manuel')
range(0, -1) <class 'range'> >>> print(numeros) >>> print(numeros)
>>> age = [22, 19]
[1, 2, 3, 4, 5, (6, 7, 8)] [1, 2, 3, 4, (6, 7, 8)]
>>> print(list(it.zip_longest(name, age, fillvalue='?')))
>>> print(range(3)[1]) # se puede acceder a un elemento del range() [('Juan', 22), ('Alex', 19), ('Ana', '?'), ('Manuel', '?')] list.extend(itr) amplia la lista añadiendo todos los elementos del iterable (itr).
1 indicando su índice. Equivale a list[len(list):] = itr.
Aplicar una función a cada elemento de una lista
>>> print(range(6)[2:5]) # acortar un range con slicing devuelve otro range. La función map(function, itr) devuelve un objeto map con la función (function) >>> numeros = [1, 2, 3, 4, 5] >>> numeros = [1, 2, 3, 4, 5]
range(2, 5)
aplicada a cada argumento de la lista original (itr). Para visualizar los elementos >>> numeros.extend((6, 7, 8)) >>> numeros[4:] = (6, 7, 8)
>>> pais = ['Colombia', 'Venezuela'] >>> print(list(range(2, -8, -2))) se debe convertir a una lista. Se suele utilizar junto a expresiones lambda ya que >>> print(numeros) >>> print(numeros)
>>> for n in range(len(pais)): [2, 0, -2, -4, -6] permite ahorrarnos el esfuerzo de crear bucles for. [1, 2, 3, 4, 5, 6, 7, 8] [1, 2, 3, 4, 5, 6, 7, 8]
>>> print(n+1, pais[n])
1 Colombia # el valor devuelto por la función len(), puede Se puede colocar como argumento varios iterables, solo hay que asegurarse list.insert(i, x) inserta un ítem (x) y da su posición (i). El primer argumento es el
2 Venezuela ser usado como parámetro de range(). que la función tenga un parámetro para cada iterable. índice (i) del elemento a insertar. Así, list.insert(0, x) inserta el elemento (x) al
>>> list(range(4))+list(range(5)) # solo se pueden concatenar tipos range() principio de la lista, y list.insert(len(lista), x) equivale a list.append(x).
# el método str.upper() no es aplicable a listas, pero se puede aplicar a cada elemento.
[0, 1, 2, 3, 0, 1, 2, 3, 4] convertidos previamente a listas.
>>> nombres = ['Raúl', 'Andrés', 'Germán'] >>> numeros = [1, 2, 4, 5] >>> numeros = [1, 2, 3, 4, 5]
Combinar varias secuencias en una sola >>> NOMBRES = map(str.upper, nombres) >>> numeros.insert(2, ‘tres’) >>> numeros.insert(0, (1, 1))
>>> print(list(NOMBRES)) >>> print(numeros) >>> print(numeros)
La función zip(*itr) toma varias secuencias (itr) y combina los elementos de ['RAÚL', 'ANDRÉS', 'GERMÁN'] [1, 2, ‘tres’, 4, 5] [(1, 1), 1, 2, 3, 4, 5]
cada secuencia con la misma posición en una tupla. La función retorna un zip
object, el cual se puede convertir en list, tuple, dict, set para poder visualizar >>> numeros = [1, 2, 3, 4, 5]
>>> resultado = list(map(lambda x: x + 5, numeros))
list.remove(x) remueve el primer ítem de la lista cuyo valor es igual a (x). Arroja
los elementos. Cuando se proporcionan múltiples iterables de diferente >>> print(resultado) ValueError si no se encuentra tal elemento.
longitud, se detiene cuando se agota la secuencia más corta. El operador ( * [6, 7, 8, 9, 10]
) permite desempaquetar los argumentos. >>> frutas = ['mango', 'fresa', 'salmón'] >>> frutas = [‘mango’, ‘fresa’]
>>> a = [1, 2, 3, 4, 5] >>> frutas.remove('salmón') >>> frutas.remove(‘salmón’)
>>> name = ('Juan', 'Alex', 'Ana') >>> b = [6, 7, 8, 9, 10] >>> print(frutas) >>> print(frutas)
>>> age = [22, 19, 24] >>> multiplicacion = list(map(lambda x, y: x * y, a, b)) ['mango', 'fresa'] ValueError
>>> height = [1.75, 1.81, 1.62] >>> print(multiplicacion)
>>> personal_data = zip(name, age, height) [6, 14, 24, 36, 50] list.pop([i]) elimina el elemento de la posición (i) dada y lo devuelve. El
# cambiar el tipo de variable de cada elemento, de str a int.
argumento es opcional, si no se especifica ningún índice, list.pop() elimina y
>>> print(personal_data)
<zip object at 0x00857DA0> >>> num = ['10', '20', '30'] devuelve el último elemento de la lista.
>>> result = map(int, num) # otra forma de cambiar el tipo de variable.
>>> print(list(personal_data)) >>> numeros = [1, 2, 4, 5] >>> numeros = [1, 2, 3, 4, 5]
>>> print(list(result)) >>> for i in range(len(lista)):
[('Juan', 22, 1.75), ('Alex', 19, 1.81), ('Ana', 24, 1.62)] >>> numeros.pop(2) >>> print(numeros.pop())
[10, 20, 30] >>> lista[i] = int(lista[i]) >>> print(numeros) [5]
# se utiliza para iterar múltiples secuencias en paralelo.
Filtrar elementos de una lista [1, 2, 5]
>>> for nombre, edad in zip(name, age):
>>> print('{} tiene {} años.'.format(nombre, edad)) La función filter(function, itr) ofrece una forma simple de filtrar todos los list.clear() remueve todos los elementos de la lista. Equivale a del list[:]
Juan tiene 22 años. elementos de una lista (itr) para los que la función (function) devuelve True
Alex tiene 19 años. (es decir, cumplen una condición). Como la función retorna un objeto filter, es >>> numeros = [1, 2, 4, 5] >>> numeros = [1, 2, 3, 4, 5]
Ana tiene 24 años. necesario convertir a una lista para poder visualizar los elementos. >>> numeros.clear() >>> print(numeros.clear())
>>> print(numeros) None
# permite crear diccionarios a partir de dos secuencias.
[]
>>> cosas = ['bolso', 'lapiz', 'regla'] >>> cosas = ['bolso', 'lapiz', None] La función tuple[slice(x, y, z)] es equivalente al slicing tuple[x:y:z], aunque se
list.index(x, [star, end]) devuelve el índice del primer elemento cuyo valor es >>> print(all(cosas)) >>> print(all(cosas)) puede usar para permitir que el usuario defina su propia porción que se
igual a (x). Genera ValueError si no hay tal elemento. Los argumentos True False aplicará a los datos, no suele ser muy común.
opcionales (start) y (end) se utilizan para limitar la búsqueda a una subcadena
particular (pero el índice devuelto se calcula en relación con el comienzo de la any(itr) retorna True al menos un elemento de la lista es verdadero. Si la lista >>> numeros = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
secuencia completa en lugar del argumento de inicio). está vacía devuelve False. >>> print(numeros[slice(1, 5)])
(2, 3, 4, 5)
>>> numeros = [1, 2, 4, 5] >>> numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> cosas = [' ', 'lapiz', None] >>> cosas = [ ]
>>> print(any(cosas)) >>> print(any(cosas)) Concatenar tuplas
>>> print(numeros.index(4)) >>> print(numeros.index(7, 3, 7))
2 6 True False El operador suma ( + ) permite concatenar varias tuplas, dando como resultado
sum(itr[, number]) retorna la suma de los elementos de la lista (itr). El segundo una tupla nueva que contiene los elementos de dichas tuplas. El operador ( +=
list.count(x) devuelve el número de veces que un elemento (x) aparece en la ) permite concatenar una tupla a otra ya existente.
lista. argumento (number – opcional) es un número que se agrega al resultado final.
>>> num = [10, 20, 30] >>> num = [10, 20, 30] >>> city = ('Denver', 'Bostón') >>> alumnos = ('Juan', 'Esteban')
>>> nombres = ['Luis', 'Ana', 'Luis', 'Luis'] >>> cod = (102, 104, 102) >>> ciudad = ('Tunja', 'Pasto') >>> alumnos += ('Ana', 'Jimena')
>>> print(sum(num)) >>> print(sum(num, 40))
>>> print(nombres.count('Luis')) >>> print(cod.count(102)) >>> print(city + ciudad) >>> print(alumnos)
3 2 60 100
('Denver', 'Bostón', 'Tunja', 'Pasto') ('Juan', 'Esteban', 'Ana', 'Jimena')
list.sort(key=None, reverse=False) ordena los elementos de la lista de manera 5. TUPLAS Repetir una tupla varias veces
ascendente (modifica la lista). Si (reverse=True) se ordenará de forma El operador ( * ) funciona con listas como repetidor. Aquí, los elementos en
descendente. En cambio, la función sorted(itr, key=None, reverse=False) crea Una tupla es un conjunto ordenado e inmutable (no se puede modificar las listas no se copian, sino que se referencian varias veces.
una copia de la lista ordenada de forma ascendente. una vez creado) que puede contener cualquier tipo de dato. Los elementos
se indican entre paréntesis ( ) y separados por comas. En realidad, los paréntesis >>> tupla = ([ ],) * 3 >>> tupla = ('Camilo', 'Laura')
>>> user = ['Juan', 'Alex', 'Ana'] >>> user = ['Juan', 'Alex', 'Ana'] no son necesarios, el constructor de la tupla es la coma ( , ). Así, una tupla de >>> print(tupla) >>> print(tupla * 2)
>>> user.sort() >>> print(sorted(user)) ([ ], [ ], [ ]) ('Camilo', 'Laura', 'Camilo', 'Laura')
>>> print(user) ['Alex', 'Ana', 'Juan']
un único elemento, debe contener una coma.
['Alex', 'Ana', 'Juan'] Las tuplas ocupan menos espacio de memoria que las listas (mayor velocidad de Comparación entre tuplas
procesamiento). Dos tuplas son iguales cuando tienen el mismo tamaño y cada uno de sus
list.reverse() invierte los elementos de la lista (modifica la lista). También se elementos correspondientes tienen el mismo valor. Se compara el primer
puede invertir la lista utilizando slicing [::-1]. Mientras que la función >>> tupla = ("hola", 3.2, 1) >>> tupla = (5,) >>> tupla = ( ) elemento de cada objeto, luego el segundo elemento y así.
reversed(itr) crea un objeto reversed el cual se puede convertir a una lista.
Índices y particionados en tuplas – acceder a los elementos >>> print((1, 2, 3) < (1, 3, 4)) >>> print(('gato', 'perro') > ('leon', 'cebra'))
>>> numeros = [1, 9, 3, 7, 5] >>> numeros = [1, 9, 3, 7, 5] Se puede acceder a cada elemento de una tupla por medio de su índice (i), True False
>>> numeros.reverse() >>> print(numeros[::-1]) según la sintaxis tuple[i], en donde [0] es el primer elemento. Es posible usar
>>> print(numeros) [5, 7, 3, 9, 1] índices negativos, donde [-1] es el último elemento y [-2] el penúltimo. Como Convertir tuplas a otros tipos de variables
[5, 7, 3, 9, 1] Las tuplas se pueden convertir a cualquier tipo de secuencia: listas, sets,
la tupla es inmutable, no es posible modificar o eliminar un elemento de ella.
>>> numeros = [1, 9, 3, 7, 5] >>> numeros = [1, 9, 3, 7, 5] cadenas de texto y diccionarios. Las funciones list(itr) y set(itr) convierten una
>>> print(reversed(numeros)) >>> print(list(reversed(numeros))) >>> tupla = (1, "sol", (1,2), True) >>> tupla = ('Hi', 10, ['45', '33', 'Ob']) tupla (itr) en una lista y en un set, respectivamente.
<list_reverseiterator object …> [5, 7, 3, 9, 1] >>> print(tupla[-1]) >>> print(tupla[2][1])
True 33 La función dict(itr) convierte una tupla (itr) en un diccionario, pero la tupla
list.copy() devuelve una copia de la lista. Equivale a list[:]. >>> tupla[2] = 'luna' # las tuplas no soportan la asignación de elementos, debe contener secuencias anidadas de dos elementos (par clave – valor).
>>> numeros = [1, 2, 3, 4, 5] >>> print(tupla) el intentar modificar una tupla provoca un TypeError.
>>> colores = ('rojo', 'azul', 'verde') >>> colores = ('rojo', 'azul', 'verde')
>>> numeros2 = numeros.copy() TypeError tampoco soporta la eliminación de sus elementos (del).
>>> print(list(colores)) >>> print(set(colores))
>>> print(numeros2) ['rojo', 'azul', 'verde'] {'rojo', 'verde', 'azul'}
[1, 2, 3, 4, 5]
El particionado o slicing, permite crear nuevas subtuplas (devuelve una copia
de la tupla) al elegir porciones de una tupla con sus índices, según la sintaxis >>> usuario = (('name', 'Juan'), ('surname', 'Ruiz'))
Los métodos como insert, remove, sort, etc., que solo modifican la lista, no list[star:end:step]. Python lo interpreta como una subtupla que va desde la >>> print(dict(usuario))
{'name': 'Juan', 'surname': 'Ruiz'}
tienen un valor de retorno impreso, por lo cual devuelven None, para así evitar posición [start] hasta la posición [end], sin incluir este último. El tercer numero
confusiones. (step) determina cada cuantas posiciones añadir un elemento a la subtupla. Por otro lado, el método str.join(itr) convierte una tupla (itr) en una cadena
>>> numeros = [1, 2, 3, 4, 5] >>> numeros = [1, 2, 3, 4, 5] No es necesario indicar el principio y el final del slicing. Si estos se omiten, se de texto, uniendo los elementos del iterable por medio de un string (str). Los
>>> print(numeros.append(6)) >>> print(numeros.insert(1, 1.5)) usará por defecto las posiciones de inicio y final de la tupla. elementos del iterable deben ser cadenas de texto.
None None
>>> tupla = (1, 2, 3, 4, 5, 6, 7, 8, 9) >>> tupla = (1, 2, 3, 4, 5, 6, 7, 8, 9) >>> name = ('Vaca', 'Toro', 'Pollo') >>> name = ('amor', 'paz', 'felicidad')
enumerate(itr, [start]) crea un objeto enumerate, que convertido a una lista, >>> print(' + '.join(name)) >>> print(' con '.join(name))
>>> print(tupla[2:6]) >>> print(tupla[1:8:2])
Vaca + Toro + Pollo amor con paz con felicidad
corresponde a un conjunto de tuplas de dos elementos (índice, valor) por cada (3, 4, 5, 6) (2, 4, 6, 8)
elemento del iterable (itr). El segundo argumento (start – opcional), señala el >>> print(tupla[5:]) >>> print(tupla[:5]) Convertir otro tipo de variables a tuplas
número desde donde comenzará a contar el índice (0 por defecto). (6, 7, 8, 9) (1, 2, 3, 4, 5) Las listas, sets, diccionarios y cadenas de texto se pueden convertir a tuplas por
>>> nombres = ['Luis', 'Ana', 'Luis', 'Luis'] >>> print(tupla[::3]) >>> print(tupla[:7:2]) medio de la función tuple(itr).
(1, 4, 7) (1, 3, 5, 7)
>>> print(list(enumerate(nombres, 1))) En el caso de los diccionarios, la tupla solo contendrá las claves. Si se desea
[(1, 'Luis'), (2, 'Ana'), (3, 'Luis'), (4, 'Luis')] >>> print(tupla[5::3]) >>> print(tupla[-7::2]) convertir un diccionario a una tupla que contenga solo los valores, se utiliza el
(6, 9) (3, 5, 7, 9)
len(itr) retorna la longitud (número de items) de una lista (itr). método dict.values(). Si se desea convertir un diccionario a una tupla que
>>> print(tupla[-8:-3]) >>> print(tupla[1:-2:2]) contenga tuplas con los pares clave – valor, se utiliza el método dict.items().
>>> capitales = ['Bogotá', 'Quito', 'Venezuela'] (2, 3, 4, 5, 6) (2, 4, 6)
>>> print(len(capitales)) >>> print(tupla[::-2]) >>> print(tupla[:-1:3]) >>> frutas = ['mango', 'pera', 'uva'] >>> ciudades = {'Cali', 'Zarzal', 'Buga'}
3 (9, 7, 5, 3, 1) (1, 4, 7) >>> print(tuple(frutas)) >>> print(tuple(ciudades))
('mango', 'pera', 'uva') ('Cali', 'Buga', 'Zarzal')
>>> tupla[4:-1] = ('vacío') # las tuplas no soportan la asignación de elementos.
all(itr) retorna True si todos los elementos de la lista son verdaderos, o si la >>> print(tupla) >>> num = {'a':1, 'b':2, 'c':3} >>> num = {'a':1, 'b':2, 'c':3}
lista está vacía. TypeError >>> print(tuple(num)) >>> print(tuple(num.values()))
('a', 'b', 'c') (1, 2, 3) ((1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)) >>> lenguajes = ('python', 'lua', 'ruby') >>> lenguajes = ('python', 'lua', 'ruby')
>>> num = {'a':1, 'b':2, 'c':3} >>> print(max(lenguajes)) >>> print(max(lenguajes, key=len))
>>> print(tuple(num.items()))
Sin embargo, es preferible utilizar funciones predefinidas siempre que se pueda, ruby python
(('a', 1), ('b', 2), ('c', 3)) en vez de declaraciones con flujo complejo.
Combinar varias secuencias en una sola
Si una cadena de texto se convierte en una tupla, cada elemento de la tupla >>> print(tuple(zip(*matriz))) La función zip(*itr) toma varias secuencias (itr) y combina los elementos de
((1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)) cada secuencia con la misma posición en una tupla. La función retorna un zip
sería un carácter. Mientras que el método str.split(sep=None, maxsplit=-1)
convierte una cadena (str) en una lista utilizando una cadena como separador Desempaquetando una lista de argumentos object, el cual se puede convertir en list, tuple, dict, set para poder visualizar
(sep), si no se indica, utiliza los espacios en blanco o los saltos de línea (\n) como Cuando los argumentos ya están en una lista o tupla, pero necesitan ser los elementos. Cuando se proporcionan múltiples iterables de diferente
separador. El segundo argumento (maxsplit – opcional) indica el máximo de desempaquetados para llamar a una función que requiere argumentos longitud, se detiene cuando se agota la secuencia más corta. El operador ( *
divisiones que puede tener lugar. El método str.rsplit(sep=None, maxsplit=- posicionalmente separados, se debe escribir la función con el operador ( * ) para ) permite desempaquetar los argumentos.
1) hace lo mismo, solo que realiza el proceso de derecha a izquierda. Esta lista desempaquetar argumentos de una lista o tupla. >>> name = ('Juan', 'Alex', 'Ana')
resultante, se puede convertir luego a una tupla. >>> age = [22, 19, 24]
>>> args = (2, 12, 2)
>>> height = [1.75, 1.81, 1.62]
>>> capital = 'Bogotá' >>> frutas = 'mango, pera, uva' >>> print(tuple(range(*args))) # llamada a la función range() con los argumentos
>>> print(tuple(capital)) >>> print(tuple(frutas.split(', '))) (2, 4, 6, 8, 10) desempaquetados de la lista args. >>> personal_data = zip(name, age, height)
('B', 'o', 'g', 'o', 't', 'á') ('mango', 'pera', 'uva') >>> print(personal_data)
<zip object at 0x00857DA0>
Empaquetado y desempaquetado de secuencias (ordenadas) Ordenar elementos de una tupla >>> print(tuple(personal_data))
El empaquetado de secuencias se refiere a que varios valores se pueden La función incorporada sorted(itr, key=None, reverse=False) crea una nueva lista (('Juan', 22, 1.75), ('Alex', 19, 1.81), ('Ana', 24, 1.62))
empaquetar juntos en una secuencia (lista, tupla, conjunto). ordenada ascendentemente a partir de un iterable (itr), la lista resultante se
# desempaquetando una lista de argumentos
El desempaquetado de secuencias se refiere a que los valores individuales puede convertir una tupla posteriormente. >>> info = (('Juan', 'Camilo'), (19, 17))
de una secuencia (lista, tupla, conjunto) pueden ser asignados a una serie de El parámetro (key) debe ser una función que tome un solo argumento y >>> print(tuple(zip(*info)))
variables, esto requiere que la cantidad de variables a la izquierda del ( = ) sea devuelva una clave para cada elemento de la lista con propósitos de (('Juan', 19), ('Camilo', 17))
del tamaño de la secuencia. comparación. Se puede utilizar una función hecha por uno mismo. Además, si se tienen secuencias de diferente longitud, y se desea rellenar los
La asignación múltiple solo es una combinación del empaquetado y El parámetro (reverse) acepta un valor booleano. Se usa reverse=True para espacios faltantes, se puede utilizar el método it.zip_longest(*itr, fillvalue=’
desempaquetado de secuencias, en donde los valores individuales de una marcar un orden descendente. ’) del módulo itertools.
secuencia son asignados a una serie de variables.
# los elementos de la secuencia deben ser del mismo tipo, sino, lanza TypeError. >>> import itertools as it
>>> nombres = ('Andrés', 'Julián', 'Germán') # empaquetado de tuplas. >>> num = (9, 2, 7, 3, 6) >>> name = ('Fabio', 'ana', 'Alejandra', 'camilo') >>> name = ('Juan', 'Alex', 'Ana', 'Manuel')
>>> jefe, asesor, cliente = nombres # desempaquetado de secuencias. >>> num2 = sorted(num) >>> result = sorted(name, key=len) >>> age = [22, 19]
>>> print(asesor) >>> print(tuple(num2)) >>> print(tuple(result)) >>> print(tuple(it.zip_longest(name, age, fillvalue='?')))
Julián (2, 3, 6, 7, 9) ('ana', 'Fabio', 'camilo', 'Alejandra') (('Juan', 22), ('Alex', 19), ('Ana', '?'), ('Manuel', '?'))
>>> jefe, asesor, cliente = ('Andrés', 'Julián', 'Germán') # asignación múltiple. >>> num = (9, 2, 7, 3, 6)
>>> print(cliente) >>> num2 = sorted(num, reverse=True)
Aplicar una función a cada elemento de una tupla
Germán >>> print(tuple(num2)) La función map(function, itr) devuelve un objeto map con la función (function)
(9, 7, 6, 3, 2) aplicada a cada argumento de la tupla original (itr). Para visualizar los elementos
Tuplas por compresión se debe convertir a una tupla. Se suele utilizar junto a expresiones lambda ya
Una forma de crear tuplas de manera compacta es por medio de las tuplas por Un patrón común es ordenar objetos complejos usando algunos de los índices que permite ahorrarnos el esfuerzo de crear bucles for.
compresión. De esta manera se crea un generator object, el cual se puede del objeto como clave. Para facilitar esto, se tiene el módulo Operator y sus
convertir a una tupla posteriormente. Se suele usar para crear tuplas donde funciones itemgetter(), attrgetter() y methodcaller(). Se puede colocar como argumento varios iterables, solo hay que asegurarse
cada elemento es resultado de alguna operación aplicada a la secuencia. que la función tenga un parámetro para cada iterable.
>>> from operator import itemgetter
>>> a = (10, 20, 30, 40)
[<expresión que retorna> <cláusula for> <cláusula if - filtrado>] >>> user = (('Jhon', 14), ('Juan', 20), ('Ana', 17)) >>> b = (15, 42, 27, 10)
# crea una tupla de cuadrados # ordena según los elementos de índice [1]. >>> c = (3, 5, 1, 7)
>>> cuadrados = (x ** 2 for x in range(10)) >>> print(tuple(sorted(user, key=itemgetter(1)))) >>> suma = tuple(map(lambda x, y, c: x + y + c, a, b, c))
>>> print(cuadrados) (('Jhon', 14), ('Ana', 17), ('Juan', 20)) >>> print(suma)
<generator object <genexpr> at 0x00DEBB70> (28, 67, 58, 57)
Invertir el orden de una tupla
>>> print(tuple(cuadrados)) Se puede utilizar el slicing [::-1]. O la función reversed(itr) que crea un objeto Filtrar elementos de una tupla
(0, 1, 4, 9, 16, 25, 36, 49, 64, 81)
reversed el cual se puede convertir a una tupla. La función filter(function, itr) ofrece una forma simple de filtrar todos los
# combina los elementos de dos listas si no son iguales elementos de una tupla (itr) para los que la función (function) devuelve True.
>>> print(((x, y) for x in [1,2,3] for y in [3,1,4] if x != y)) >>> user = ['Juan', 'Alex', 'Ana'] # reversed(itr) crea un objeto reversed,
>>> print(tuple(reversed(user))) mientras que sorted(itr, reverse=True) crea
Como la función retorna un objeto filter, es necesario convertir a una tupla para
<generator object <genexpr> at 0x002DBB70>
('Ana', 'Alex', 'Juan') una lista. poder visualizar los elementos.
>>> print(tuple((x, y) for x in [1,2,3] for y in [3,1,4] if x != y))
((1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)) Esta función puede parecer un bucle for, pero al ser una función incorporada,
Valores máximos y mínimos de una lista
es más rápida.
Listas por compresión anidadas Las funciones max(itr[, default=obj, key=func]) y min(itr[, default=obj,
La expresión de retorno de una lista por compresión puede ser cualquier key=func]) retornan el máximo y mínimo valor de una tupla (itr). El segundo # filtra los elementos cuyo módulo sea igual a cero.
expresión arbitraria, incluyendo otra lista por compresión. Así, la lista por argumento (default – opcional) es el valor que retorna en caso de que la tupla >>> numeros = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
(itr) esté vacía, si no se especifica, lanza ValueError. El tercer argumento (key >>> resultado = filter(lambda x: x % 2 == 0, numeros)
compresión anidada se evalúa en el contexto del for que lo sigue. >>> print(tuple(resultado))
– opcional) permite personalizar el orden de clasificación por medio de una
>>> matriz = ((1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12)) (2, 4, 6, 8, 10)
función.
# lista por compresión que transpone filas y columnas. Reducir los valores de una lista a un solo valor
>>> print(((fila[i] for fila in matriz) for i in range(4))) >>> letras = ('c', 'b', 'Y', 'Z') >>> letras = ('c', 'b', 'Y', 'Z')
>>> print(min(letras)) >>> print(min(letras, key=str.lower)) La función reduce(function, itr) del módulo functools como su nombre lo
<generator object <genexpr> at 0x007FBB70>
Y b indica, reduce los valores de una tupla (itr) a un solo valor, aplicando una función
>>> print(tuple((tuple(fila[i] for fila in matriz) for i in range(4)))) reductora (function). La función reductora debe tener dos argumentos.
Nota que para crear un conjunto vacío hay que usar set( ) y no { } (esto último >>> print(code) >>> print(code)
>>> from functools import reduce {1, 2, 3, 4} {1, 2, 4}
crea un diccionario).
# suma los elementos de la lista entre sí.
>>> numeros = (1, 2, 3, 4, 5) >>> conjunto = { } >>> conjunto = set( ) Similar a set.discard(elem) se tiene set.remove(elem), con la diferencia de
>>> resultado = reduce(lambda x, y: x + y, numeros) >>> print(type(conjunto)) >>> print(type(conjunto)) que si el elemento (elem) no se encuentra es simplemente ignorado en el primer
>>> print(resultado) <class 'dict'> <class 'set'> caso, mientras que el segundo método lanza la excepción KeyError.
15
Se utilizan normalmente para verificación de pertenencia y eliminación de El método set.add(elem) sirve para añadir otro elemento. Si se quiere añadir
# la tendencia ahora es usar listas por compresión, dejando a un lado las funciones todos los elementos de otro contenedor, se utiliza el método
map() y filter(), y usando reduce() en casos muy aislados.
entradas duplicadas. Se puede iterar sobre un set, pero lo hará con un orden
indefinido. set.update(contenedor).
Otros métodos y funciones para las listas >>> letra = {'F', 'M', 'E'} >>> letra = {'F', 'M', 'E'}
# elimina las entradas duplicadas. # verificación de pertenencia.
tuple.index(x, [star, end]) devuelve el índice del primer elemento cuyo valor es >>> canasta = {9, 5, 2, 5, 5, 2, 2} >>> print(9 in canasta) >>> letra.add(('S', 'X')) >>> letra.update(('S', 'X'))
>>> print(canasta) True >>> print(letra) >>> print(letra)
igual a (x). Genera ValueError si no hay tal elemento. Los argumentos {'M', 'E', ('S', 'X'), 'F'} {'X', 'E', 'S', 'F', 'M'}
{9, 2, 5}
opcionales (start) y (end) se utilizan para limitar la búsqueda a una subcadena
particular (pero el índice devuelto se calcula en relación con el comienzo de la Convertir sets a otros tipos de variables Eliminar todos los elementos o uno de forma aleatoria
secuencia completa en lugar del argumento de inicio). Un set se puede convertir a cualquier tipo de secuencia: listas, tuplas, El método set.clear() elimina todos los elementos del set, dejando así un set
diccionarios y cadenas de texto. Las funciones list(itr) y tuple(itr) convierten vacío. El método set.pop() devuelve y elimina un elemento de forma aleatoria,
>>> numeros = (1, 2, 4, 5) >>> numeros = (1, 2, 3, 4, 5, 6, 7, 8, 9)
>>> print(numeros.index(4)) >>> print(numeros.index(7, 3, 7)) un set (itr) en una lista y en una tupla, respectivamente. lanza la excepción KeyError cuando ya no hay elementos.
2 6 >>> code = {1, 2, 3} >>> code = {4, 2, 7, 3, 9, 1}
La función dict(itr) convierte un set (itr) en un diccionario, pero dicho set debe
contener secuencias anidadas de dos elementos (par clave – valor). >>> code.clear() >>> code.pop()
tuple.count(x) devuelve el número de veces que un elemento (x) aparece en la >>> print(code) >>> print(code)
tupla. El método str.join(itr) convierte un set (itr) en una cadena de texto, uniendo set() {2, 3, 4, 7, 9}
>>> nombres = ('Luis', 'Ana', 'Luis', 'Luis') >>> cod = (102, 104, 102) los elementos del iterable por medio de un string (str). Los elementos del
iterable deben ser cadenas de texto. Compresión de conjuntos
>>> print(nombres.count('Luis')) >>> print(cod.count(102))
3 2
Al igual que con las listas, es posible crear sets de manera compacta a partir
>>> colores = {'rojo', 'azul', 'verde'} >>> colores = {'rojo', 'azul', 'verde'} de cualquier elemento iterable (listas, tuplas, cadenas), por medio de la sintaxis
enumerate(itr, [start]) crea un objeto enumerate, que convertido a una tupla, >>> print(list(colores)) >>> print(tuple(colores)) {<expresión que retorna> <cláusula for> <cláusula if - filtrado>}
corresponde a un conjunto de tuplas de dos elementos (índice, valor) por cada ['verde', 'rojo', 'azul'] ('verde', 'rojo', 'azul')
>>> num = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
elemento del iterable (itr). El segundo argumento (start – opcional), señala el >>> user = {('Jhon', '601'), ('Ana', '543')} >>> fruta = {'pera', 'uva', 'mango'}
>>> num_2 = {n for n in num if n > 5} # filtra los números mayores que 5.
número desde donde comenzará a contar el índice (0 por defecto). >>> print(dict(user)) >>> print(' / '.join(fruta))
>>> print(num_2)
{'Ana': '543', 'Jhon': '601'} mango / uva / pera
{6, 7, 8, 9, 10}
>>> nombres = ('Luis', 'Ana', 'Luis', 'Luis')
>>> print(list(enumerate(nombres, 1))) Convertir otro tipo de variables a sets
Operaciones principales: unión, intersección, diferencia
((1, 'Luis'), (2, 'Ana'), (3, 'Luis'), (4, 'Luis')) Las listas, tuplas, diccionarios y cadenas de texto se pueden convertir a sets por
Si se tienen dos conjuntos A y B:
medio de la función set(itr).
len(itr) retorna la longitud (número de items) de una tupla (itr). La unión ( | ) ( A.union(B) ) retorna un nuevo conjunto que contiene los
En el caso de los diccionarios, el set solo contendrá las claves. Si se desea
>>> capitales = ('Bogotá', 'Quito', 'Venezuela') elementos que se hallan en al menos uno de los dos sets involucrados.
convertir un diccionario a un set que contenga solo los valores, se utiliza el
>>> print(len(capitales)) método dict.values(). Si se desea convertir un diccionario a un set que La intersección ( & ) ( A.intersection(B) ) retorna un nuevo conjunto que
3 contiene los elementos que se encuentran en ambos sets.
contenga tuplas con los pares clave – valor, se utiliza el método dict.items().
all(itr) retorna True si todos los elementos de la tupla son verdaderos, o si la Si una cadena de texto se convierte en un set, cada elemento del set sería un La diferencia ( – ) ( A.difference(B) ) retorna un nuevo set que contiene
tupla está vacía. carácter. El método str.split(sep=None, maxsplit=-1) convierte una cadena los elementos del set A que no están en el set B.
>>> numeros = (1, 2, 3, 4, 5) >>> numeros = (0, 1, 2, 3, 4, 5) (str) en una lista utilizando una cadena como separador (sep) (espacios en La diferencia simétrica ( ^ ) ( A.symmetric_difference(B) ) retorna un
>>> print(all(numeros)) >>> print(all(numeros)) blanco por defecto). El segundo argumento (maxsplit – opcional) indica el nuevo conjunto que contiene los elementos que pertenecen a alguno de los
True False máximo de divisiones que puede tener lugar. El método str.rsplit(sep=None, dos conjuntos, pero no a ambos.
maxsplit=-1) hace lo mismo, solo que realiza el proceso de derecha a izquierda.
any(itr) retorna True si al menos un elemento de la tupla es verdadero. Si la Esta lista resultante, se puede convertir luego a un set. >>> niños = {'Juan', 'Felipe'} >>> niños = {'Juan', 'Felipe'}
tupla está vacía devuelve False. >>> niñas = {'Ana', 'Juliana'} >>> niñas = {'Ana', 'Juliana'}
>>> ciudad = ['Cali', 'Zarzal', 'Buga'] >>> fruta = ('mango', 'pera', 'uva') >>> print(niños | niñas) >>> print(niños.union(niñas))
>>> cosas = (0, 'lapiz', None) >>> cosas = ( ) >>> print(set(ciudad)) >>> print(set(fruta)) {'Ana', 'Juliana', 'Juan', 'Felipe'} {'Felipe', 'Ana', 'Juan', 'Juliana'}
>>> print(any(cosas)) >>> print(any(cosas)) {'Cali', 'Zarzal', 'Buga'} {'mango', 'uva', 'pera'}
True False >>> cls_a = {'Ana', 'Karen', 'Alex'} >>> cls_a = {'Ana', 'Karen', 'Alex'}
>>> num = {'A': 1, 'B': 2, 'C': 3} >>> num = {'A': 1, 'B': 2, 'C': 3} >>> cls_b = {'Juan', 'Ana', 'Karen'} >>> cls_b = {'Juan', 'Ana', 'Karen'}
sum(itr[, number]) retorna la suma de los elementos de la tupla (itr). El segundo >>> print(set(num)) >>> print(set(num.values())) >>> print(clase_a & clase_b) >>> print(cls_a.intersection(cls_b))
argumento (number – opcional) es un número que se agrega al resultado final. {'B', 'A', 'C'} {1, 2, 3} {'Ana', 'Karen'} {'Ana', 'Karen'}
>>> num = {'A': 1, 'B': 2, 'C': 3} >>> palabra = 'Amigo' >>> cls_a = {'Ana', 'Karen', 'Alex'} >>> cls_a = {'Ana', 'Karen', 'Alex'}
>>> num = (10, 20, 30) >>> num = (10, 20, 30) >>> print(set(num.items())) >>> print(set(palabra)) >>> cls_b = {'Juan', 'Ana', 'Karen'} >>> cls_b = {'Juan', 'Ana', 'Karen'}
>>> print(sum(num)) >>> print(sum(num, 40)) {('C', 3), ('A', 1), ('B', 2)} {'m', 'g', 'A', 'i', 'o'} >>> print(cls_a – cls_b) >>> print(cls_a.difference(cls_b))
60 100
{'Alex'} {'Alex'}
>>> cuerpo = 'cabeza, torso, piernas'
>>> print(set(cuerpo.split(', '))) >>> con1 = {1, 2, 3, 4} >>> con1 = {1, 2, 3, 4}
6. CONJUNTOS (SET) {'piernas', 'cabeza', 'torso'} >>> con2 = {3, 4, 5, 6} >>> con2 = {3, 4, 5, 6}
Un set es una colección no ordenada y mutable de objetos únicos (sin Añadir y remover un elemento seleccionado >>> print(con1 ^ con2) >>> print(con1.symmetric_difference(con2))
Los métodos set.add(elem) y set.discard(elem) permiten añadir y remover, {1, 2, 5, 6} {1, 2, 5, 6}
elementos repetidos). Los elementos pueden ser de diversos tipos, no obstante,
no pueden incluir objetos mutables (listas, diccionarios y sets). Para escribir un respectivamente, un elemento (elem) al indicarlo como argumento. >>> print(con2 ^ con1) >>> print(con2.symmetric_difference(con1))
{1, 2, 5, 6} {1, 2, 5, 6}
set, se especifican sus elementos entre llaves { } o se utiliza la función set(itr). >>> code = {1, 2, 3} >>> code = {1, 2, 3, 4}
>>> code.add(4) >>> code.discard(3)
Las operaciones de unión, intersección y diferencia aceptan más de dos Otros métodos y funciones aplicables a sets Los métodos dict.values() y dict.items() permiten que al convertir el
conjuntos, por ejemplo ( A | B | C | … ) ( A.union(*others) ) donde el ( * ) set.copy() devuelve una copia del set. diccionario a otra variable, se conserven sus valores o los pares clave – valor
se refiere al desempaquetado de argumentos. La diferencia simétrica si como tuplas de 2 elementos, respectivamente.
solamente compara dos conjuntos a la vez. >>> numeros = {1, 2, 3, 4, 5}
>>> numeros2 = numeros.copy() >>> num = {'uno': 'one', 'dos': 'two', 'tres': 'three'}
Actualización de los sets (no se crean nuevos objetos) >>> print(numeros2) >>> print(list(num)) >>> print(list(num.values()))
Si se tienen dos conjuntos A y B: {1, 2, 3, 4, 5} ['uno', 'dos', 'tres'] ['one', 'two', 'three']
El método A.update(B) agrega todos los elementos de B al conjunto A, es >>> print(list(num.items())) >>> print(tuple(num))
len(itr) retorna la longitud (número de items) de un set (itr). [('uno', 'one'), ('dos', 'two'), ('tres', 'three')] ('uno', 'dos', 'tres')
decir, sustituye al conjunto A con el resultado de la unión entre A y B.
>>> capitales = {'Bogotá', 'Quito', 'Venezuela'} >>> print(tuple(num.values())) >>> print(set(num))
El método A.intersection_update(B) deja en el conjunto A solo los >>> print(len(capitales)) ('one', 'two', 'three') {'dos', 'tres', 'uno'}
elementos que también pertenecen a B, es decir, sustituye al conjunto A con 3 >>> print(', '.join(num)) >>> print(', '.join(num.values()))
el resultado de la intersección entre A y B. uno, dos, tres one, two, three
all(itr) retorna True si todos los elementos del set son verdaderos, o si el set
El método A.difference_update(B) elimina todos los elementos de B en el está vacío. Convertir otro tipo de iterable a diccionarios
conjunto A, es decir, sustituye al conjunto A con el resultado de la diferencia Las listas, tuplas y sets se pueden convertir a un diccionario por medio de la
entre A y B. >>> numeros = {1, 2, 3, 4, 5} >>> numeros = {0, 1, 2, 3, 4, 5}
>>> print(all(numeros)) >>> print(all(numeros)) función dict(itr). Es necesario que la secuencia (itr) esté compuesta de pares
El método A.symmetric_difference_update(B) sustituye al conjunto A True False clave – valor.
con el resultado de la diferencia simétrica entre A y B. También varias asignaciones de variables se pueden convertir en un diccionario,
any(itr) retorna True si al menos un elemento del set es verdadero. Si el set
>>> cjt = {1, 2, 3, 4} >>> cjt = {1, 2, 3, 4} está vacío devuelve False. haciendo uso de la misma función. Esto resulta útil cuando las claves son
>>> unn = {3, 4, 5, 6} >>> unn = {3, 4, 5, 6} cadenas simples.
>>> cjt.update(unn) >>> cjt.difference_update(unn) >>> cosas = {0, 'lapiz', None} >>> cosas = set( )
>>> print(cjt) >>> print(cjt) >>> print(any(cosas)) >>> print(any(cosas)) # crea el diccionario a partir de secuencias de pares clave – valor.
{1, 2, 3, 4, 5, 6} {1, 2} True False >>> tupla = (('uno', 'one'), ('dos', 'two'))
>>> print(dict(tupla))
Igualdad entre sets max(itr[, default=obj, key=func]) y min(itr[, default=obj, key=func]) retornan {'uno': 'one', 'dos': 'two'}
Dos conjuntos son iguales si y solo si contienen los mismos elementos, sin el máximo y mínimo valor de un set (itr). El segundo argumento (default – >>> lista = [['uno', 'one'], ['dos', 'two']]
importar el orden. opcional) es el valor que retorna en caso de que el set (itr) esté vacío, si no se >>> print(dict(lista))
especifica, lanza ValueError. El tercer argumento (key – opcional) permite {'uno': 'one', 'dos': 'two'}
>>> cdg = {2, 6, 8, 4, 3} >>> cdg = {2, 6, 8, 4, 3}
>>> nmr = {4, 2, 3, 8, 6} >>> nmr = {4, 2, 3, 8, 6}
personalizar el orden de clasificación por medio de una función. >>> conjunto = {('uno', 'one'), ('dos', 'two')}
>>> print(cdg == nmr) >>> print(cdg is nmr) >>> print(dict(conjunto))
>>> frutas = {'uva', 'pera', 'banano'} >>> frutas = {'uva', 'pera', 'banano'}
True False {'uno': 'one', 'dos': 'two'}
>>> print(max(frutas, key=len)) print(min(frutas))
banano banano # especifica los pares usando argumentos por palabra clave.
Por otro lado, el método set1.isdisjoint(set2) retorna True si ambos >>> print(dict(uno='one', dos='two'))
conjuntos no comparten ni un solo elemento entre sí. Estos se denominan sum(itr[, number]) retorna la suma de los elementos del set (itr). El segundo {'uno': 'one', 'dos': 'two'}
conjuntos disconexos. argumento (number – opcional) es un número que se agrega al resultado final.
También, la función zip(*itr) permite crear diccionarios a partir de dos
>>> cdg = {2, 3, 4} >>> cdg = {2, 3, 4} >>> num = {10, 20, 30} >>> num = {10, 20, 30} secuencias (*itr). La función recibe dos argumentos, ambos secuencias que
>>> nmr = {5, 6, 7} >>> nmr = {4, 5, 6} >>> print(sum(num)) >>> print(sum(num, 40))
>>> print(cdg.isdisjoint(nmr)) >>> print(cdg.isdisjoint(nmr))
representarán las claves y los valores, respectivamente.
60 100
True False
Las sentencias break y continue en bucles anidados, solo afectan al bucle más
interno en el que se encuentran.
La sentencia pass no hace nada. Se suele usar como marca de lugar dentro
del esqueleto del programa.
>>> while True: # marca de lugar cuando se está realizando el esqueleto
… pass de un programa.
Sentencia else
El bucle while se ejecutar siempre y cuando la condición sea True. En el
momento en que la condición sea False, se termina el bucle while y se ejecuta
la sentencia else.
Si el bucle termina por una sentencia break, las instrucciones de la sentencia
else no se ejecutan.
>>> num = 0 >>> num = 0
>>> while num < 10: >>> while num < 10:
… print(num, end=' ') … num += 1
… num += 1 … if num ** 3 == 343:
>>> else: … break
… print('Fin del ciclo') … print(num, end='/ ')
0 1 2 3 4 5 6 7 8 9 Fin del ciclo >>> else:
… print('No se cumple la condición')
1/ 2/ 3/ 4/ 5/ 6/
Bucles infinitos
Si la condición del bucle while se cumple siempre, el ciclo no terminará nunca
de ejecutarse y se tendrá, lo que se conoce como un bucle infinito. Para
interrumpir un bucle infinito se puede utilizar Ctrl + C.
La manera más fácil de crear un bucle infinito es con la sintaxis while True, la
cual se debe acompañar con la sentencia break, para terminar el bucle cuando
se cumpla una condición específica.
Funciones y módulos
while True:
<bloque de código que se ejecuta siempre> Las agrupaciones de código que se pueden reutilizar en distintos programas
If <condición>: se denominan subrutinas. Estas se pueden incluir en ficheros (llamados
break bibliotecas o librerías) al que los programas pueden acceder. En Python,
>>> i = 1 >>> contador = 0 se utiliza el término función para referirse a las subrutinas y el término
>>> while i > 0: >>> while True:
módulo para referirse a las bibliotecas.
… print(i, end=" ") … while contador <= 5:
… i += 1 … print(contador, end=' ')
123456789… … contador += 1 Funciones
… Break
012345 Definir funciones
Para utilizar una función, primero se debe definir. Para esto se escribe la
palabra def, el nombre de la función y paréntesis que pueden incluir los
argumentos, seguidos de dos punto. Las instrucciones que forman la función
se escriben con sangría con respecto a la primera línea.
>>> def licencia():
print('''Copyright 2018 Anferubu
Todos los derechos reservados''')
return
Objeto (instancia)
En Python, todo es un objeto (sustantivo), el cual posee una serie de
propiedades o atributos (variables), y tiene la capacidad de realizar acciones
denominadas métodos (funciones). Para crear un objeto (instanciar una
clase), se asigna la clase como valor de una variable, junto con cualquier
parámetro necesario entre paréntesis.
mi_auto = Automovil(1)
En Python todos son objetos. Las cadenas de texto, por ejemplo, tienen
métodos como upper(), que devuelve el texto en mayúsculas, o count()
que devuelve el número de veces que se encontró una subcadena en el texto.
>>> texto = 'Hola mundo'
>>> texto.upper()
‘HOLA MUNDO’
Herencia