Almacenamiento de datos
Supongamos que ha desarrollado un juego de computadora llamado "Usuario hostil" en el que los jugadores compiten contra una interfaz de computadora intrincada y hostil. Ahora necesita escribir un programa que rastree las ventas mensuales de este juego durante un período de cinco años. O supongamos que necesita hacer un inventario de los cromos de Hacker Hero.
Muy pronto llegará a la conclusión de que necesita más que simples tipos de datos básicos para almacenar y procesar información.
Listas (matrices)
Para facilitar el trabajo con una gran cantidad de datos, a un grupo de celdas se le asigna un nombre común. Este grupo de celdas se denomina matriz.
Array – es un grupo de celdas de memoria del mismo tipo, ubicadas una al lado de la otra y que tienen un nombre común. Cada celda del grupo tiene un número único.
Al trabajar con arreglos, debe aprender a resolver tres tareas:
X asignar memoria del tamaño requerido para la matriz;
X escribir datos en la celda deseada;
X Leer datos de una celda.
Arreglos en Python
No existen tales arreglos en Python. En cambio, las listas se utilizan para almacenar un grupo de objetos del mismo tipo (pero no solo del mismo tipo): objetos del tipo list . La diferencia entre listas y arreglos es que una lista es una estructura dinámica, cuyo tamaño se puede cambiar durante la ejecución del programa (borrar, agregar elementos) sin pensar en las operaciones de administración de memoria (esto lo hace el compilador).
En el futuro, cuando analicemos el trabajo con listas, usaremos la palabra "matriz", ya que la mayoría de las veces las listas se usan precisamente en el papel de una matriz (almacenan datos del mismo tipo).
Crear una matriz
Cuando se crea una matriz, se asigna espacio en la memoria (un cierto número de celdas).
1) Las matrices se pueden crear simplemente enumerando elementos:
UN = [1, 4, 7, 12, 5]
imprimir (tipo (A))
El programa producirá
<clase 'lista'>
Es decir, un arreglo es un objeto de tipo list (traducido del inglés list ).
2) Las matrices pueden estar compuestas por datos de cualquier tipo: enteros o números reales, cadenas de caracteres
A = ["Vasya", "Petya", "Fedya"]
Algunas formas de trabajar con arreglos
3) Las matrices se pueden "agregar".
A = [1, 5] + [25, 7]
4) La suma de matrices idénticas se puede reemplazar por la multiplicación. Por lo tanto, es fácil crear una matriz con los mismos valores, así:
A = [0]*10 # creó una matriz de 10 elementos y la llenó con ceros
5) Una matriz siempre "sabe" tu talla. La función len() se utiliza para determinar el tamaño de una matriz. A menudo, el tamaño de la matriz se almacena en una variable separada para que el programa se pueda cambiar fácilmente para que funcione con un tamaño de matriz diferente.
Ejemplo
N = 10 # almacena el tamaño de la matriz en la variable N
A = [0] * N # crea una matriz de tamaño N
print(len(A)) # imprime el tamaño de la matriz
El tamaño de una matriz se puede establecer desde el teclado.
|
Trabajar con elementos de matriz
Gran parte de la utilidad de las matrices proviene del hecho de que se puede acceder a sus elementos individualmente.
La forma de hacerlo es usar un índice para numerar los elementos.
Índicees un valor que apunta a un elemento de matriz específico.
Para hacer referencia a un elemento de una matriz, debe especificar el nombre de la matriz seguido de su índice entre corchetes. Por ejemplo, puede escribir el valor 100 en el elemento de la matriz en el índice 1 de esta manera: A[1] = 100 .
¡Tienes que recordar!
¡LA NUMERACIÓN DE MATRICES EN PYTHON COMIENZA DESDE CERO!
(Este es un requisito previo: debe comenzar desde cero. Es especialmente importante recordarlo).
Ejemplo
x = (A[3] + 5) * A[1] # leer los valores de A[3] y A[1]
A[0] = x + 6 # escribe un nuevo valor en A[0]
Analicemos el programa para trabajar con elementos de matriz.
yo = 1
A = [0] * 5 # crea una matriz de 5 elementos
A[0] = 23 # en cada uno de los 5 elementos de la matriz (índices 0 a 4)
A[1] = 12 # escribir un valor específico
A[2] = 7
A[3] = 43
A[4] = 51
A[2] = A[i] + 2*A[i-1] + A[2*i] # cambia el valor del elemento con índice 2 al resultado de la expresión
# ya que i=1, entonces reemplazando el valor de la variable i en la expresión obtenemos
# la siguiente expresión A[2] = A[1] + 2*A[0] + A[2];
imprimir(A[2] + A[4])
Como resultado de ejecutar este programa aparecerá en pantalla el valor de la suma de los elementos del arreglo con índice 2 y con índice 4 igual a 116. Como puede ver en el ejemplo, podemos acceder a cualquier elemento de la matriz . Y también calcule el número de elemento requerido usando varias fórmulas (por ejemplo, como en el programa A[i-1] o A[2*i] ). En estos casos, los índices de los elementos serán calculados y dependerán del valor de i.
En Python, puede usar valores de índice negativos para matrices y contar desde el final de la matriz. Por ejemplo:
A[-1] - el último elemento de la matriz
A[-2] - penúltimo elemento
etc
Analicemos el programa.
N=5
A = [0] * N
x=1
imprimir(A[x - 3]) # accediendo al elemento A[-2]
print(A[x - 3 + len(A)]) # acceder al elemento A[3]
# este es el mismo elemento que A[-2]
A[x + 4] = A[x] + A[2 * (x + 1)] # después de sustituir x en expresiones y cálculos
# obtener la siguiente línea A[5] = A[1] + A[4]
# A[5] no existe tal elemento
# error - matriz fuera de los límites
Dado que la matriz se declara con 5 elementos, los elementos se enumerarán de -5 a 4 . Vemos que el programa en la línea 6 se refiere a un elemento inexistente: A[5] .
Resulta que el programa ha ido más allá de los límites de la matriz.
En tales casos, el programa generalmente falla con error de tiempo de ejecución.
|
Iterando sobre los elementos de la matriz
Cuando se trabaja con arreglos, por lo general tiene que trabajar con todos los elementos del arreglo a la vez.
Iterar a través de elementos: recorrer todos los elementos de la matriz y, si es necesario, realizar alguna operación en cada uno de ellos.
Para esto, se usa con mayor frecuencia un bucle con una variable, que cambia de 0 a N-1 , donde N es el número de matriz elementos.
Bajo N consideraremos el tamaño actual de la matriz, es decir, N = len(A).
...
para i en el rango (N):
# aquí trabajamos con A[i]
...
En el bucle especificado, la variable i tomará los valores 0, 1, 2, ..., N-1. Así, en cada paso del ciclo, accedemos a un elemento específico del arreglo con el número i .
Por lo tanto, basta con describir lo que se debe hacer con un elemento de la matriz A[i] y colocar estas acciones dentro de dicho bucle.
Escribamos un programa que llene la matriz con los primeros N números naturales, es decir, al final del programa, los elementos de la matriz deben volverse iguales
A[0] = 1
A[1] = 2
A[2] = 3
...
UN[N - 1] = N
Es fácil ver el patrón: el valor de un elemento de matriz debe ser mayor en 1 que el índice del elemento.
El bucle se verá así
para i en el rango (N):
A[i] = yo + 1
|
Generadores de listas
El lenguaje Python le permite resolver muchos problemas de manera concisa y confiable. Vamos a enumerar las principales posibilidades para llenar una matriz. 1) La creación y el llenado de una matriz se pueden escribir así:
A = [i para i en el rango (N)] # Con N = 5, matriz A = [0,1,2,3,4]
A = [i*i para i en el rango (N)] # Con N = 5, matriz A = [0,1,4,9,16]
for i in range(N) : recorre todos los valores de i desde 0 hasta N-1.
El siguiente elemento de la matriz contendrá el valor que viene antes de la palabra for , en el primer caso i , en el segundo - i*i .
Obtenemos el mismo resultado usando la siguiente notación:
A = lista(rango(N)) # con N = 5, matriz A = [0,1,2,3,4]
2) Puede escribir en la matriz no todos los valores, sino solo aquellos que cumplan una determinada condición.
Ejemplo
Llenar la matriz con todos los números pares en el rango 0 a 9.
A = [i para i en el rango (10)
si yo % 2 == 0]
imprimir(*A) # matriz A = [0,2,4,6,8]
En este caso, debe comprender que la longitud de la matriz será inferior a 10.
3) Llenar una matriz desde el teclado con elementos que se ubican uno por línea se puede hacer de dos maneras.
N=5
A = [0]*5
para i en el rango (N):
A[i] = int(entrada())
|
A = [int(entrada()) para i en rango(N)]
# cada vez que se repite el bucle,
# la cadena de entrada se convierte
# a un entero (usando int)
# y este número se agrega a la matriz
|
4) Llenar una matriz desde el teclado con elementos que están todos ubicados en la misma línea es un poco más complicado. Debe leer la cadena, dividirla en elementos y luego convertir cada elemento en un número entero
s = entrada().split()
A = [int(i) para i en s]
más o menos
A = list(map(int, input().split())) # función incorporada lista()
# transforma la secuencia
# a la lista mutable
Salida de matriz
También puede mostrar una matriz en la pantalla de diferentes maneras.
Forma estándar, utilizada en muchos lenguajes de programación. |
Tal ciclo se puede escribir más corto. El valor de х en cada paso del ciclo se completa con el siguiente elemento de la matriz. |
En Python, puedes escribir así. |
para i en el rango (len (A)):
imprimir(A[i], end=" ")
|
para x en A:
imprimir(x, fin=" ")
|
imprimir(*A)
# signo * delante del nombre
# de la matriz significa que
# necesita ser convertido
# matriz en un conjunto de valores individuales
|
|