A menudo las tareas tienen que almacenar la tabla de datos rectangular. Tales tablas se llaman matrices o matrices bidimensionales. Un arreglo bidimensional es equivalente a una matriz en matemáticas. En Python, cualquier tabla se puede representar como una lista de listas (una lista, donde cada elemento es a su vez una lista). Las listas son uno de los tipos básicos que provee Python y uno de los más útiles.
Estructura y Acceso a Elementos
Un arreglo bidimensional organiza los datos en filas y columnas, similar a una tabla. Los elementos de un arreglo bidimensional se definen por sus posiciones, que se especifican mediante índices de fila y columna. Esta estructura facilita el acceso y la manipulación de puntos de datos individuales.
| Columna 0 | Columna 1 | Columna 2 | |
|---|---|---|---|
| Fila 0 | elemento[0][0] | elemento[0][1] | elemento[0][2] |
| Fila 1 | elemento[1][0] | elemento[1][1] | elemento[1][2] |
| Fila 2 | elemento[2][0] | elemento[2][1] | elemento[2][2] |
La tabla anterior sirve como ejemplo de un arreglo bidimensional o matriz. Como puedes observar, declaramos un arreglo bidimensional con dimensiones 3 x 3. Para ilustrar cómo recuperar valores de esta tabla, consideremos un ejemplo:
El primer elemento de a aquí - a[0] - es una lista de números [1, 2, 3] . El primer elemento de esta nueva lista es a[0][0] == 1 ; además, a[0][1] == 2 , a[0][2] == 3 , a[1][0] == 4 , a[1][1] == 5 , a[1][2] == 6 .
Creación e Inicialización de Arreglos Bidimensionales
El Desafío de la Repetición de Listas
Supongamos que se dan dos números: el número de filas de n el número de columnas m . Debe crear una lista de tamaño n × m , rellenada con, por ejemplo, ceros. Sin embargo, llenar un arreglo bidimensional manualmente puede resultar laborioso y complicado.
Lea también: IVA 21% Excel
Un error común al intentar inicializar un arreglo bidimensional con valores por defecto (como ceros) es usar la repetición de listas de esta manera: lista = [[0] * m] * n.
Esto se puede ver fácilmente si establece el valor de a[0][0] en 5 , y luego imprime el valor de a[1][0] - también será igual a 5. El motivo es, [0] * m devuelve solo una referencia a una lista de m ceros, pero no una lista. La repetición posterior de este elemento crea una lista de n elementos que hacen referencia a la misma lista (al igual que la operación b = a para listas no crea la nueva lista), por lo que todas las filas en la lista resultante son en realidad las mismas cuerda. Por lo tanto, no se puede crear una lista bidimensional simplemente repitiendo una cadena.
Formas Correctas de Inicializar
Entonces, ¿qué hacer? En este caso, cada elemento se crea independientemente de los demás. Una de las formas más eficientes y "pythónicas" es usar generadores anidados (también conocidos como compresiones de lista anidadas).
Puede usar generadores anidados para crear matrices bidimensionales, colocando el generador de la lista que es una cadena, dentro del generador de todas las cadenas. Pero la lista interna también se puede crear usando, por ejemplo, dicho generador: [0 for j in range(m)] . Aquí hay otra solución, que repite listas para construir las siguientes filas de la lista.
El caso es que si el número 0 se reemplaza por una expresión que depende de i (el número de línea) j (el número de columna), se obtiene la matriz rellenada de acuerdo con alguna fórmula. Por ejemplo, en un conjunto donde hay n = 5 filas, m = 6 columnas, y el elemento con el índice de filas i e índice de columnas j se calcula con la fórmula a[i][j] = i * j .
Lea también: Guía IVA reducido
Procesamiento e Iteración de Arreglos Bidimensionales
Para procesar una matriz bidimensional, normalmente utiliza bucles anidados. El primer ciclo itera a través del número de fila, el segundo ciclo recorre los elementos dentro de una fila. Ya hemos intentado explicar que una variable for-loop en Python puede iterar no solo sobre un range() , sino generalmente sobre todos los elementos de cualquier secuencia. Las secuencias en Python son listas y cadenas (y algunos otros objetos que aún no hemos encontrado).
Ejemplo de Manipulación de Diagonal
Supongamos que le dan una matriz cuadrada (una matriz de n filas n columnas). Y supongamos que tiene que establecer elementos de la diagonal principal igual a 1 (es decir, aquellos elementos a[i][j] para los cuales i==j ), para establecer elementos por encima de esa diagonal igual a 0, y para establecer elementos debajo de esa diagonal igual a 2. En este caso, puede hacerlo manualmente estableciendo a[0][0] = 1 , a[0][1] = 0 y así sucesivamente, pero no lo hará manualmente para arreglos de 100 filas y 100 columnas , que a menudo son el caso. Estamos ansiosos por mostrarle varias formas de resolver este problema.
Primero, nótese que los elementos que se encuentran sobre la diagonal principal - son los elementos a[i][j] para los cuales i
Entrada de Datos de Usuario en Arreglos Bidimensionales
Digamos que un programa toma una matriz bidimensional de entrada en forma de n filas, cada una de las cuales contiene m números separados por espacios. La pregunta es: ¿Cómo fuerza al programa a leerlo?
Arreglos de Múltiples Dimensiones
Realmente no hay límite a la hora de construir matrices, por lo que se podrían hacer de tantas dimensiones como se quiera. Por ejemplo, una matriz tridimensional podría verse como [[[0, 1], [0, 1]], [[0, 1], [0, 1]]].
Lea también: ¿Cómo localizar tus XML del SAT?
