Calcolare la media aritmetica escludendo una percentuale prefissata di valori agli estremi
1 2 3 |
VOTI = [3, 7, 8, 4, 4, 9, 6, 8, 7, 6] # Sequenza di voti perc = 0.20 # Percentuale da troncare mt = media_troncata(VOTI, perc) # Assegna a mt il calcolo della media troncata |
Nella prima fase bisogna calcolare il numero di voti da escludere
1 2 3 4 5 6 7 |
def media_troncata(lista, p): N = len(lista) # 10, Numero di elementi pN = int(p*N) # 2, Percentuale di N (da troncare) pN2 = pN//2 # 1, Metà della percentuale di N NN = N-pN # 8, Numero di elementi effettivamente elaborati ... # Calcolo effettivo della media |
Soluzione 1
Se i numeri sono ordinati è sufficiente escludere dalla somma i primi pN2 e gli ultimi pN2
1 2 3 4 5 6 7 8 9 10 11 12 |
def media_troncata(lista, p): ... # I calcoli precedenti lista=sorted(lista) totale=0 for i in range(pN2, N-pN2): totale += lista[i] media=totale/NN return media |
Soluzione 2
Usa la funzione predefinita sum() applicata alla sottolista
1 2 3 4 5 6 7 8 9 10 |
def media_troncata(lista, p): ... # I calcoli precedenti lista=sorted(lista) totale = sum(lista[pN2 : -pN2]) media = totale/NN return media |
Soluzione 3
Senza ordinare la lista?
Individua i valori minimi e massimi e li rimuove dalla lista
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
def media_troncata(lista, p): ... # I calcoli precedenti lista=lista[:] # Copia tutta la lista for i in range(pN2): # Ripete pN2 volte minimo =min(lista) massimo=max(lista) lista.remove(minimo) # Rimuove un valore minimo lista.remove(massimo) # Rimuove un valore massimo totale=sum(lista) # Calcola la media dei voti rimasti media =totale/NN return media |
…