comparer deux python chaînes qui contiennent des nombres
Mise à JOUR: je devrais l'avoir précisé plus tôt, mais pas tous les noms sont simplement des flotteurs. Par exemple, certains d'entre eux sont "préfixe" avec "YT". Ainsi, par exemple," YT1.1. donc, vous avez le même problème YT1.9 < YT1.11 doit être vrai. Je suis vraiment surpris que la chaîne échec de la comparaison....
bonjour,
cela devrait être une question assez simple mais je n'arrive pas à trouver la réponse. J'aimerais un tas de XL feuilles de calcul de par leur nom. Chacun de ces noms sont des chiffres mais de la même manière que les manuels scolaires "sections" sont numérotées, sens de l'article 4.11 vient après 4.10, qui tous deux viennent après 4,9 et 4.1. Je pensais que la simple comparaison de ces chiffres que la chaîne allait faire, mais je reçois le texte suivant:
>>> s1 = '4.11'
>>> s2 = '4.2'
>>> s1> s2
False
>>> n1 = 4.11
>>> n2 = 4.2
>>> n1 > n2
False
comment peut-on comparer ces deux valeurs telles que 4.11 est plus grande que la 4.2?
OriginalL'auteur Ramy | 2011-05-19
Vous devez vous connecter pour publier un commentaire.
Convertir les noms de n-uplets d'entiers et de comparer les tuples:
Mise à jour: vos noms, apparemment, peut contenir d'autres caractères que des chiffres, vous aurez besoin de vérifier pour
ValueError
et de laisser toutes les valeurs qui ne peuvent pas être convertis à ints inchangé:Pour trier une liste de noms, d'utiliser
splittedname
comme une fonction clé poursorted
:n'avez pas à convertir en int même.
OriginalL'auteur Pär Wieslander
Ce n'est pas une méthode intégrée, mais ça devrait marcher:
Qui peut être nettoyé, mais il vous donne l'essentiel.
OriginalL'auteur nmichaels
Ce que vous cherchez est appelé "tri naturel". Ce qui s'oppose à "tri lexicographique". Il y a plusieurs recettes qui n'ont de ce, depuis la sortie exacte de ce que vous voulez, c'est la mise en œuvre spécifique. Une rapide recherche dans google donne ceci (note* ce n'est pas mon code, et je n'ai pas testé):
http://nedbatchelder.com/blog/200712.html#e20071211T054956
OriginalL'auteur Falmarri
utilisation
s1.split(".")
pour créer une liste des éléments avant et après la virgule puis trier la liste de listes, par exemple:Donc, vous la mise en œuvre pourrait être:
OriginalL'auteur marr75
Si vous savez qu'ils sont des nombres réels [*] , il suffit de:
[*] Dans le cas contraire, être prêt à gérer une soulevées
ValueError
.Cela suppose que les nombres sont valables flotteurs.
Non, ceci suppose que l'OP avait posé une autre question. Valide les flotteurs est ok hypothèse.
OriginalL'auteur Santa