2013-07-04 47 views
18

sto cercando di ordinare la lista di stringhe contenente i numericome ordinare la lista python di stringhe di numeri

a = ["1099.0","9049.0"] 
a.sort() 
a 
['1099.0', '9049.0'] 

b = ["949.0","1099.0"] 
b.sort()  

b 
['1099.0', '949.0'] 

a 
['1099.0', '9049.0'] 

Ma Lista b è l'ordinamento e non elencare a

+1

'a' è già ordinato. '1' è più piccolo di' 9'. –

+1

Desidero che il numero più grande sia all'indice '0' sempre e il numero più piccolo all'indice' 0' –

+0

possibile duplicato di [Ordinamento di numeri in formato stringa con Python] (http://stackoverflow.com/questions/2597099/sorting-numbers -in-string-format-with-python) –

risposta

50

si desidera ordinare in base ai float valori (non valori di stringa), in modo da provare :

>>> b = ["949.0","1099.0"] 
>>> b.sort(key=float) 
>>> b 
['949.0', '1099.0'] 
+4

waw! bello così facile da ricordare questa soluzione. –

+0

grazie per il tuo aiuto –

+0

Non sapevo che avresti potuto farlo. Bello. – enginefree

1

Sono entrambi ordinati. '1' viene prima di '9'. Guarda qui: Ascii table

+0

Sì grazie ... totalmente colpa mia –

3

Convertirli a int o float o anche decimal (dato che ha i numeri finali)

>>> b = [float(x) for x in b] 
>>> b.sort() 
>>> b 
[949.0, 1099.0] 
+0

Ciò significherebbe cambiare il tipo di elementi in 'b', che può essere o non essere l'ideale. – arshajii

12

utilizzare una sorta all'interno lambda per convertirli galleggiare e quindi ordinare correttamente:

a = sorted(a, key=lambda x: float(x)) 

in modo che li mantenere come stringhe, ma ordinati per valore e non lessicografico

+2

@Keyser Il mio punto è che non hai bisogno di una lambda, puoi semplicemente usare 'key = float'. – arshajii

+0

per rendere la mia risposta fredda? in realtà, ho dimenticato le funzioni chiave. @Keyser che usa 'sort (key = float)' raggiunge lo stesso risultato –

Problemi correlati