sort()
Il metodo ordina una lista, in ordine crescente, in loco
1 2 3 |
lista=[1, 8, 0, 1, 1, 9, 2, 8] lista.sort() print(lista) # [0, 1, 1, 1, 2, 8, 8, 9] |
Ordinare una lista in ordine decrescente
1 2 3 |
lista=[1, 8, 0, 1, 1, 9, 2, 8] lista.sort(reverse=True) print(lista) # [9, 8, 8, 2, 1, 1, 1, 0] |
reverse()
Il metodo capovolge una lista in loco
1 2 3 |
lista=[1, 8, 0, 1, 1, 9, 2, 8] lista.sort() # [0, 1, 1, 1, 2, 8, 8, 9] lista.reverse() # [9, 8, 8, 2, 1, 1, 1, 0] |
sorted()
La funzione restituisce una lista ordinata a partire dalla struttura dati specificata (insieme, lista, tupla, …).
1 2 3 4 5 6 7 8 9 10 11 |
tupla=(1, 8, 0, 1, 1, 9, 2, 8) lista=sorted(tupla) print(tupla) # (1, 8, 0, 1, 1, 9, 2, 8) print(lista) # [0, 1, 1, 1, 2, 8, 8, 9] stringa="arcobaleno" lista =sorted(stringa) print(stringa) # arcobaleno print(lista) # ['a', 'a', 'b', 'c', 'e', 'l', 'n', 'o', 'o', 'r'] |
Ordinare con un criterio
Si può chiedere alla funzione sort()
di applicare una funzione agli elementi prima di ordinarli.
La funzione deve avere un solo argomento e restituire un valore
- key = abs, valore numerico senza segno
- key = id, il codice interno dell’oggetto
- key = len, numero di elementi dell’elemento
- key = max, valore massimo contenuto nell’elemento
- key = min, valore minimo contenuto nell’elemento
- key = round, valore numerico arrotondato
- key = sum, somma dei valori numerici dell’elemento
- key = str.lower, considera le stringhe tutte minuscolo
- key = str.lstrip, considera le stringhe senza spazi iniziali
- key = str.strip, considera le stringhe senza spazi iniziali e finali
- key = str.swapcase, considera le stringhe con maiuscolo e minuscolo scambiati
- key = str.upper, considera le stringhe tutte minuscolo
- …
1 2 3 |
lista=[1, -8, 0, -1, 1, -9, 2, -8] lista.sort(key=abs) # [0, 1, -1, 1, 2, -8, -8, -9] |
La funzione può essere arbitraria
1 2 3 4 5 6 7 8 9 |
def somma_codici(s): # Somma dei codici ASCII della stringa somma=0 for c in s: somma += ord(c) return somma lista=["abc", "ax", "ac", "ad"] lista.sort(key=somma_codici) # ['ac', 'ad', 'ax', 'abc'] |
Ordinare rispetto a una posizione
Soluzione 1
1 2 3 4 5 6 |
def secondo(s): return s[1] lista=["abc", "ax", "ac", "ad"] lista.sort(key=secondo) # ['abc', 'ac', 'ad', 'ax'] |
Soluzione 2
1 2 3 4 5 |
from operator import itemgetter lista=["abc", "ax", "ac", "ad"] lista.sort(key=itemgetter(1)) # ['abc', 'ac', 'ad', 'ax'] |
Studia gli algoritmi classici per ordinare una sequenza di dati: bubble sort, selection sort, quicksort, …