sort()
Il metodo ordina una lista, in ordine crescente, in loco
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
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
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, stringa, …).
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]
insieme={1, 8, 0, 1, 1, 9, 2, 8}
lista=sorted(insieme)
print(insieme) # {1, 8, 0, 9, 2}
print(lista) # [0, 1, 2, 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
- …
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
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
def secondo(s):
return s[1]
lista=["abc", "ax", "ac", "ad"]
lista.sort(key=secondo) # ['abc', 'ac', 'ad', 'ax']
Soluzione 2
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, …