Joaquim Gabarro
gabarro@cs.upc.edu
Computer Science
Universitat Politècnica de Catalunya
Matrices y listas de listas
Función zip
Curiosidades
Matrices y listas de listas
Matrices y listas de listas
M=[[1,2,3],[4,5,6]]
Acceder a los elementos de M
>>> M=[[1,2,3],[4,5,6]]
>>> M[0] #primera fila (es decir la zero)
[1, 2, 3]
>>> M[1] #segunda fila (es decir la uno)
[4, 5, 6]
>>> M[0][1] #de M[0]=[1,2,3] el segundo elemento
2
Rangos en M
Número de filas el número de columnas y rangos en M
>>> M=[[1,2,3],[4,5,6]]
>>> M
[[1, 2, 3], [4, 5, 6]]
>>> n_filas_M=len(M)
>>> n_filas_M
2
>>> n_columnas_M=len(M[0])
>>> n_columnas_M
3
>>> list(range(n_filas_M)) #para enumerar filas
[0, 1]
>>> list(range(n_columnas_M))
[0, 1, 2]
Añadir y extender una lista
M = (mi,j ) = (m[i][j]))
1 2 3
M =
4 5 6
m0,0 m0,1 m0,2 m[0][0] m[0][1] m[0][2]
= =
m1,0 m1,1 m1,2 m[1][0] m[1][1] m[1][2]
Recorrido: sumar uno
Ejemplo: sumar uno
1+1 2+1 3+1 2 3 4
masUno(M) = =
4+1 5+1 6+1 5 6 7
Solución (I)
Dada M = (mi,j )
I Recorremos los valores de i que corresponden a los
ı́ndices de las filas de M.
I Para cada i, recorremos los distintos j que enumeran las
columnas .
Ejemplo:
m[0][0] m[0][1] m[0][2]
M=
m[1][0] m[1][1] m[1][2]
def mas_uno(M):
n_filas = len(M)
n_columnas = len(M[0])
masUno = []
# iterar a traves de las filas de M
for i in range(n_filas):
#inicialimos fila i-esima
fila = []
# iterar a traves de las columnas de M
for j in range(n_columnas):
fila.append(M[i][j] + 1)
masUno.append(fila)
return masUno
Ejemplo de ejecución:
def mas_uno(M):
n_columnas = len(M[0])
for fila in M:
for j in range(n_columnas):
fila[j]=fila[j] + 1
return M
>>> M=[[4,3,9],[5,0,2]]
>>> M
[[4, 3, 9], [5, 0, 2]]
>>> mas_uno(M)
[[5, 4, 10], [6, 1, 3]]
>>> M
[[5, 4, 10], [6, 1, 3]]
>>>
new file.extend(fila)
def mas_uno(M):
n_columnas = len(M[0])
masUno=[]
for fila in M:
new_file=[]
new_file.extend(fila)
for j in range(n_columnas):
new_file[j]=new_file[j] + 1
masUno.append(new_file)
return masUno
Introducción a list comprehension
Solución (III)
Veamos otra codificación parecida a a ls solución II (fihero
mas uno matriz.py):
I El primer for sobre las filas se puede reescribir
def my_squares():
squares = []
for x in range(10):
squares.append(x**2)
return squares
def my_squares():
squares = [x**2 for x in range(10)]
return squares
Ejemplo: suma de matrices
Suma de matrices
En general suma[i][j]=a[i][j]+b[i][j]
Solución (I)
>>> fila_A=[1, 4, 0]
>>> fila_A
[1, 4, 0]
>>> fila_B=[4, 3, 9]
>>> fila_B
[4, 3, 9]
>>> list(zip(fila_A, fila_B))
[(1, 4), (4, 3), (0, 9)]
También podemos hacer el zip con matrices:
>>> A=[[1,4,0],[3,7,1]]
>>> B=[[4,3,9],[5,0,2]]
>>> list(zip(A, B))
[([1, 4, 0], [4, 3, 9]), ([3, 7, 1], [5, 0, 2])]
Suma de matrices (con zip)