Aprendiendo Python 3.6 Básico (IV)

Lista por compresión anidadas:

creación de matriz.

>>> matriz = [
... [1, 2, 3, 4],
... [5, 6, 7, 8],
... [9, 10, 11, 12],
... ]
>>> matriz
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> [[fila[i] for fila in matriz] for i in range(4)] #transpuesta de la matriz
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

Captura de pantalla de 2017-06-12 00-57-33

ahora veremos otro caso de transpuestas.

>>> transpuesta = []
>>> for i in range(4):
... transpuesta.append([fila[i] for fila in matriz])
... 
>>> transpuesta
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

Captura de pantalla de 2017-06-12 01-00-21

algo mucho mas práctico es.

>>> list(zip(*matriz))
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]

Captura de pantalla de 2017-06-12 01-04-00

 

La instrucción

Hay una manera de quitar un ítem de una lista dado su índice en lugar de su valor: la instrucción “del”.  es diferente del método pop(), el cual devuelve un valor. La instrucción “del” también puede usarse para quitar secciones de una lista o vaciar la lista completa (lo que hacíamos antes asignando una lista vacía a la sección). Por ejemplo:

>>> a = [1, 2, 3, 4, 5, 6]
>>> del a[0]
>>> a
[2, 3, 4, 5, 6]
>>> del a[2:5]
>>> a
[2, 3]
>>> del a[:]
>>> a
[]

captura-de-pantalla-de-2017-06-12-01-16-43.png

 

Duplas y secuencias

Vimos que las listas y cadenas tienen propiedades en común. Como Python es un lenguaje en evolución, otros datos de tipo secuencia pueden agregarse. Existe otro dato de tipo secuencia estándar: la dupla. Una dupla consiste de un número de valores separados por comas, por ejemplo:

>>> t = 12345, 54321, 'hola!' #creando dupla numero y palabra
>>> t[0] # mostrando el primer valor
12345
>>> t #mostrando la dupla
(12345, 54321, 'hola!')
>>> 
>>> u =t, (1, 2, 3, 4, 5) # anidando una dupla
>>> u #mostrando anidación
((12345, 54321, 'hola!'), (1, 2, 3, 4, 5))
>>> t[0] = 888 #las duplas son inmutuables por tanto nos dará error
#Traceback (most recent call last):
 #File "<stdin>", line 1, in <module>
#TypeError: 'tuple' object does not support item assignment
>>> v = ([1, 2, 3], [3, 2, 1]) #duplas mutables
>>> v
([1, 2, 3], [3, 2, 1])

captura-de-pantalla-de-2017-06-12-01-23-18.png

Como puedes ver, en la salida las duplas siempre se encierran entre paréntesis, para que las duplas anidadas puedan interpretarse correctamente; pueden ingresarse con o sin paréntesis, aunque a menudo los paréntesis son necesarios de todas formas (si la dupla es parte de una expresión más grande). No es posible asignar a los ítems individuales de una dupla, pero sin embargo sí se puede crear duplas que contengan objetos mutables, como las listas.

 

Un problema particular es la construcción de duplas que contengan 0 o 1 ítem: la sintaxis presenta algunas peculiaridades para estos casos. Las duplas vacías se construyen mediante un par de paréntesis vacío; una dupla con un ítem se construye poniendo una coma a continuación del valor (no alcanza con encerrar un único valor entre paréntesis). Por ejemplo:

>>> vacia = ()
>>> singleton = 'hola',
>>> len(vacia)
0
>>> len(singleton)
1
>>> singleton
('hola',)

captura-de-pantalla-de-2017-06-12-01-30-49-e1497249143659.png

 

>>> x, y, z = t
>>> x
12345
>>> y
54321
>>> z
'hola!'
>>> t
(12345, 54321, 'hola!')

Captura de pantalla de 2017-06-12 01-35-58

desempaquetado de secuencias, pondremos nuevos valores que reemplazarán guardando el valor antiguo.

 

Conjuntos

Python también incluye un tipo de dato para conjuntos. Un conjunto es una colección no ordenada y sin elementos repetidos. Los usos básicos de éstos incluyen verificación de pertenencia y eliminación de entradas duplicadas. Los conjuntos también soportan operaciones matemáticas como la unión, intersección, diferencia, y diferencia simétrica.

>>> canasta = {'manzana', 'naranja', 'manzana', 'pera', 'naranja', 'banana'}
>>> canasta # se borra los duplicados
{'naranja', 'manzana', 'banana', 'pera'}
>>> 'naranja' in canasta # verificará si esta el valor en la lista
True
>>> 'hierba' in canasta
False
>>> a = set('abracadabra') # letras únicas en a
>>> b = set('alacazam')  # letras únicas en b
>>> a # mostrará las letras de a
{'r', 'b', 'c', 'a', 'd'}
>>> a - b       # mostrará la resta
{'d', 'b', 'r'}
>>> a | b        # mostrará letras en a o b
{'r', 'z', 'b', 'c', 'l', 'm', 'a', 'd'}
>>> a & b        # mostrará letras en a y b
{'a', 'c'}
>>> a ^ b        # mostrará letras en a o b pero no en ambos
{'r', 'z', 'b', 'l', 'm', 'd'}

Captura de pantalla de 2017-06-12 01-49-37

 

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'d', 'r'}

captura-de-pantalla-de-2017-06-12-01-55-41-e1497250614575.png

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s