Python matrici

Python matrici

In Python è possibile creare delle matrici utilizzando due semplici cicli for, oppure è possibile utilizzare semplicemente la libreria Numpy.

In questa lezione creeremo delle matrici utilizzando le istruzioni iterative, più avanti vedremo l’utilizzo di Numpy.

Python matrici – primo esercizio

In questo primo esercizio utilizziamo un doppio ciclo for per creare delle matrici con dei numeri random.

In particolare creeremo una matrice 3 x 3, ma poi generalizzeremo l’algoritmo creando matrici di dimensione personalizzata.

Innanzitutto, siccome devo generare dei numeri random, importo il modulo random ed in particolare randint.

Dopo, creo una lista vuota e con il primo ciclo for scorro tutte le righe. Per ogni riga utilizza un altro ciclo for e genero una lista di 3 numeri random. Alla fine del ciclo più interno utilizzo il metodo append di Python per appendere la lista generata alla matrice di partenza.

Ecco dunque una possibile soluzione per creare in Python delle matrici:


from random import randint

matrix = []

for i in range(3):
    n = []
    for j in range(3):
        number = randint(1,100)
        n.insert(i,number)

    matrix.append(n)


print(matrix)

Possiamo popolare una matrice con un ciclo while, ma non è la soluzione ottimale. Ricordiamo infatti che quando sappiamo esattamente quante volte deve essere eseguito un ciclo si utilizza il for. Il while si utilizza invece quando devo soddisfare una condizione.


from random import randint
matrix = []
i=0
while i < 3:
    j = 0
    n = []
    while j < 3:
        number = randint(1,100)
        n.insert(i,number)
        j = j+1
    matrix.append(n)
    i = i+1
print(matrix)

Creiamo adesso una funzione per generare una matrice.


from random import randint

def matrix(x,y):
    matrix = []
    
    for i in range(x):
        n = []

        for j in range(y):
            number = randint(1,100)
            n.insert(i,number)

        matrix.append(n)

    return matrix
    

print(matrix(3,3))

In questo modo possiamo generare delle matrici di qualsiasi dimensione.

Python matrici – secondo esercizio

Chiediamo in input all’utente la dimensione della matrice da generare.


from random import randint

def matrix(x,y):
    matrix = []
    
    for i in range(x):
        n = []

        for j in range(y):
            number = randint(1,100)
            n.insert(i,number)

        matrix.append(n)

    return matrix

x = int(input('inserisci la dimensione x della matrice '))
y = int(input('inserisci la dimensione y della matrice '))

print(matrix(x,y))

Proviamo il codice appena generato nel compilatore sotto:

In questa lezione su Python abbiamo sviluppato delle matrici utilizzando semplicemente un doppio ciclo for. Nelle prossime lezioni studieremo Numpy.

Alcuni link utili

Indice tutorial Python

  1. Funzioni
  2. Come chiamare una funzione
  3. Convertitore da decimale a binario e ottale
  4. Il fattoriale di un numero in Python
  5. Python open()
  6. Scrivere in un file con il metodo write()
  7. Memorizzare dati di input in un file di testo
  8. Python readline()
Selection Sort Python

Selection Sort Python

Sviluppiamo il selection sort in Python, un algoritmo di ordinamento, molto simile all’Insertion Sort e che opera in place. innanzitutto ricordiamo che con il termine in place si intende che non si utilizza dello spazio di memoria extra o tutt’al più un piccolo spazio.

L’algoritmo opera per confronto tra due elementi dell’array, spostando di volta in volta l’elemento più piccolo nella posizione corretta.

Selection Sort Python – come funziona

Spieghiamo, dunque, passo passo il ragionamento che sta alla base di questo algoritmo.

Data una lista iniziale di numeri interi, innanzitutto supponiamo di voler ordinarla in ordine crescente.

Dunque, con un ciclo for si scorre la lista dalla posizione 0 alla posizione n-2, dove n è la dimensione della lista, ovvero la sua lunghezza.

for i in range(n – 1):

Si assegna ad una variabile, l’indice più piccolo, ovvero l’indice 0.

min_index = i

Dopo, si utilizza un altro ciclo for per scorrere la lista partendo questa volta dalla posizione 1 (i+1) fino ad arrivare alla posizione n-1:

for j in range(i + 1, n):

Così, l’utilizzo dei due cicli for e dei due indici diversi ci consente di poter effettuare i controlli in loco.

Quindi, si confronta ciascun elemento con il valore minimo e si effettua lo scambio se si trova un valore più piccolo:

if array[j] < array[min_index]:
min_index = j

Infine si inserisce l’elemento in posizione:

array[min_index], array[i] = (array[i], array[min_index])

Ecco, quindi, una possibile implementazione dell’algoritmo Selection Sort in Python:


def selection_sort(array):
    
    n = len(array)
    
    for i in range(n - 1):
        min_index = i
        
        for j in range(i + 1, n):
            if array[j] < array[min_index]:
                min_index = j
                
        #inseriamo il minimo nella posizione corretta
        array[min_index], array[i] = (array[i], array[min_index])
    return array
numbers = [6,12,4,3,7,8]
print(selection_sort(numbers))

Provate il codice nel compiler online di sotto, per testare il funzionamento:

Analogamente se volessimo ordinare l'array in senso decrescente:


def selection_sort(array):
    
    n = len(array)
    
    for i in range(n - 1):
        max_index = i
        
        for j in range(i + 1, n):
            if array[j] > array[max_index]:
                max_index = j
                
        array[max_index], array[i] = (array[i], array[max_index])
    return array


numbers = [6,12,4,3,7,8]
print(selection_sort(numbers))

In questa lezione abbiamo sviluppato l'algoritmo di ordinamento Selection Sort in Python, nelle prossime lezioni studieremo altri algoritmo di ordinamento.

Alcuni link utili

Indice tutorial sul linguaggio Python

1 – Introduzione al linguaggio Python

2 – Le variabili

3 – Operatori aritmetici e di assegnazione

4 – Stringhe

5 – Casting

6 – Input e print

7 – Primi esercizi in Python

8 – Errori in Python