web-dev-qa-db-fra.com

Python comment trier la liste avec des valeurs flottantes

Comment trier la liste python contenant les valeurs float,

list1 = [1, 1.10, 1.11, 1.1, 1.2] 

ou

list1 = ['1', '1.10', '1.11', '1.1', '1.2'] 

Les résultats attendus sont

list_val = ['1', **'1.1', '1.2'**, '1.10', '1.11']

mais le résultat obtenu en utilisant la méthode sort () renvoie

[1, 1.1000000000000001, 1.1000000000000001, 1.1100000000000001, 1.2]

ou

['1', '1.1', '1.10', '1.11', '1.2'].

Mais ici, 1.2 devrait être compris entre 1.1 et 1.10.

6
sathish

Vous pouvez utiliser:

list1 = sorted(list1)

S'il s'agit du deuxième format (sous forme de chaîne), vous pouvez utiliser le paramètre key pour le convertir en float en utilisant:

list1 = sorted(list1, key=float)

Le paramètre key attend une fonction qui transformera les valeurs avant de trier à l'aide des valeurs transformées, tout en conservant les valeurs d'origine.

10
Jan van der Vegt

Vous pouvez trier n'importe quelle liste de deux manières.

  • Utilisation de la méthode sorted :: :: Dans cette méthode, la méthode retournée renverra une liste triée mais la liste actuelle restera la même.

    x=[1,2,3.1,4.5,2.3]
    y = sorted(x)
    y = sorted(x,key=float) #in case if the values were there as string.
    

    Dans ce cas, x reste toujours sous la forme [1,2,3.1,4.5,2.3], où la liste triée, c'est-à-dire [1,2,2.3,3.1,4.5] sera renvoyée et, dans ce cas, attribuée à y. 

  • Utilisation de l’appel de méthode sort fourni pour les listes: l’appel de méthode de tri permet de trier la liste actuelle

    x=[1,2,3.1,4.5,2.3]
    x.sort()
    

    Dans ce cas, x sera trié. Par conséquent, si vous essayez d’imprimer x, il sera comme [1,2,2.3,3.1,4.5].

Vous pouvez utiliser l'une de ces méthodes en fonction de vos besoins.

J'espère que ça aide. Bonne codage :) 

1
Strik3r

Il suffit d'utiliser sorted:

sorted(list1, key=float)

Ceci convertira l'élément en float avant de comparer, donc cela fonctionnera aussi bien pour une liste de chaînes que pour une liste de flottants (ou ints, à sa juste valeur).

0
Sebastian Wozny