2015-07-09 14 views
6

Sto provando a scrivere un programma che ordina un elenco di stringhe in base all'ultimo carattere nell'elemento.Python: Come ordinare l'elenco per ultimo carattere di stringa

["Tiger 6", "Shark 4", "Cyborg 8"] sono il modo in cui è importata la mia lista, ma ho bisogno di metterli in ordine numerico in base ai numeri alla fine.

Grazie in anticipo!

+0

i numeri sono sempre singole cifre? –

+0

In questo caso, sì. –

risposta

9

Sto provando a scrivere un programma che ordina un elenco di stringhe in base all'ultimo carattere nell'elemento.

>>> s = ["Tiger 6", "Shark 4", "Cyborg 8"] 
>>> sorted(s, key=lambda x: int(x[-1])) 
['Shark 4', 'Tiger 6', 'Cyborg 8'] 

Prova questa se ci sono più num di cifre all'ultimo.

>>> import re 
>>> sorted(s, key=lambda x: int(re.search(r'\d+$',x).group())) 
['Shark 4', 'Tiger 6', 'Cyborg 8'] 

re.search(r'\d+$',x).group() aiuta a recuperare il numero presente all'ultimo indipendentemente precedente spazio.

+0

Perché utilizzare un lambda per la chiave invece di una * funzione *. – wwii

+0

lambda viene utilizzato per creare una funzione anonima. –

1

Se i numeri non sono una sola cifra, si può provare -

>>> l = ["Tiger 6", "Shark 4", "Cyborg 8", "Temporary 12"] 
>>> l.sort(key = lambda x: int(x.rsplit(' ',1)[1])) 
>>> l 
['Shark 4', 'Tiger 6', 'Cyborg 8', 'Temporary 12'] 

str.rsplit(s, n) funzione inizia dividendo la stringa alla fine verso inizio della stringa e si ferma dopo n divide. Nel caso precedente, divide la stringa solo una volta, in uno spazio.

Problemi correlati