2010-05-11 6 views
3

je la liste suivante:trier une liste des pourcentages

l = ['50%','12.5%','6.25%','25%'] 

Ce que je voudrais trier dans l'ordre suivant:

['6.25%','12.5%','25%','50%'] 

en fonction des rendements l.sort():

['12.5%','25%','50%','6.25%'] 

Des trucs sympas pour trier facilement ces listes en Python?

+0

http://www.codinghorror.com/blog/2007/12/sorting-for-humans-natural-sort-order.html – tanascius

+4

Stockez les données sous forme de nombres et non de chaînes! - dépend de ce que vous faites d'autre avec les données mais avoir besoin d'une conversion en nombre en entrée et une en sortie peut coûter moins cher que plusieurs conversions – Mark

Répondre

15

Vous pouvez trier avec une clé personnalisée

b =['52.5%', '62.4%', '91.8%', '21.5%'] 
b.sort(key = lambda a: float(a[:-1])) 

de la station balnéaire de l'ensemble, mais utilise la valeur numérique comme la clé (c.-à-côtes de la « % » dans la chaîne et convertit à flotter.

+0

Cela ne fonctionnera pas avec '6.25%' Voulez-vous dire 'int (a [: - 1])'? –

+0

Désolé faute d'impression. Ces choses se produisent :) –

+0

Ahh, cool - il a presque travaillé je devais faire un: b.sort (clé = lambda a: float (str (a [: - 1]))) Pour le rendre pleinement fonctionnel. – mortenvp