2014-07-08 11 views
5

Ho una lista di stringhe che voglio ordinare.Ordina l'elenco di stringhe e inserisci i numeri dopo le lettere in python

Per impostazione predefinita, le lettere hanno un valore maggiore rispetto ai numeri (o numeri di stringa), che li colloca per ultimi in una lista ordinata.

>>> 'a' > '1' 
True 
>>> 'a' > 1 
True 

Voglio essere in grado di posizionare tutte le stringhe che inizia con un numero in fondo alla lista.

Esempio:

lista Celebrita:

['big', 'apple', '42nd street', '25th of May', 'subway'] 

di Python ordinamento predefinito:

['25th of May', '42nd street', 'apple', 'big', 'subway'] 

richiesto l'ordinamento:

risposta

10
>>> a = ['big', 'apple', '42nd street', '25th of May', 'subway'] 
>>> sorted(a, key=lambda x: (x[0].isdigit(), x)) 
['apple', 'big', 'subway', '25th of May', '42nd street'] 

Le funzioni di ordinamento di Python hanno un parametro opzionale key, che consente di specificare una funzione che viene applicata prima dell'ordinamento. Le tuple sono ordinate in base al loro primo elemento, quindi al secondo e così via.

Ulteriori informazioni sull'ordinamento here.

+5

Questo fa esattamente quello che l'OP chiedeva. Vale la pena sottolineare che ciò non comporterà [ordinamento naturale] (http://stackoverflow.com/questions/4836710/does-python-have-a-built-in-function-for-string-natural-sort) per i numeri di stringa, ''2'' saranno elencati dopo' '11''. –

+0

@LukasGraf Buon punto. – grc

+0

+1. Nel caso in cui la tua lista includa numeri interi, apri 'x' in' str() ':' ordinato (a, chiave = lambda x: (str (x) [0] .isdigit(), str (x)) ' –

Problemi correlati