2016-05-19 12 views
4

Wie die Python-Liste zu sortieren, die den Float-Wert enthält,Python, wie die Liste sortieren mit Fließkommawerten

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

oder

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

Die erwarteten Ergebnisse sind list_val = [ '1', '1.1', '1.2', '1.10', '1.11'], aber das zurückgegebene Ergebnis der Methode sort() gibt [1, 1.1000000000000001, 1.100000000000000001, 1.1100000000000001, 1.2] oder ['1', '1.1' zurück. "1.10", "1.11", "1.2"]. Aber hier sollte "1.2" zwischen "1.1" und "1.10" liegen.

+0

Hallo, benutze einfach die Methode sort(): >>> list1.sort() –

+0

Das sind zwei sehr unterschiedliche Listen. Sie wollen wahrscheinlich nicht die zweite, außer wenn Sie es zuerst als Eingabe bekommen. Sie können 'floatlist = [float (x) für x in der Stringliste] verwenden' –

+0

Danke für die Antwort. Aber das funktioniert nicht.Die erwarteten Ergebnisse sind list_val = ['1', '1.1', '1.2', '1.10', '1.11'], aber das zurückgegebene Ergebnis ist [1.0, 1.100000000000000001, 1.1100000000000001, 1.1000000000000001, 1.2]. Die Methode sort() gibt ['1', '1.1', '1.10', '1.11', '1.2'] zurück. Hier sollte "1.2" zwischen "1.1" und "1.10" liegen. – sathish

Antwort

0

Nur sorted verwenden:

sorted(list1, key=float) 

Dies wird das Element float vor dem Vergleich zu konvertieren, so dass es sowohl für eine Liste von Strings arbeiten oder einer Liste des Schwimmer (oder ints, für das, was es wert ist).

9

können Sie verwenden:

list1 = sorted(list1) 

Wenn es im zweiten Format (als String) ist es, Ihnen den Schlüssel-Parameter verwenden, kann es in Schwimmern unter Verwendung zu konvertieren:

list1 = sorted(list1, key=float) 

Der Schlüssel parameter erwartet eine Funktion, die die Werte vor der Sortierung mit den transformierten Werten transformiert, aber die ursprünglichen Werte beibehält.

+1

nicht zu verwechseln mit 'map', jedoch gibt das Argument' key' ** an, wie ** die Elemente sortiert werden sollen, ** ändert sie aber nicht ** beim Sortieren. –

+0

Guter Punkt, habe ich meine Antwort bearbeitet, um dies zu klären –

-1

Verwenden Sie die Methode sort().

list1.sort() 
print(list1) 
1

Sie können jede Liste auf zwei Arten sortieren.

  • Mit der sortiert Methode :: Dabei wird die sortierten Verfahren eine sortierte Liste zurück, aber die aktuelle Liste bleibt gleich

    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. 
    

    In diesem Fall x noch bleibt, wie [1,2 , 3.1,4.5,2.3], wobei die sortierte Liste ie [1,2,2,3,3.1,4.5] zurückgegeben wird und in diesem Fall y zugeordnet wird.

  • Mit dem Art Call-Methode für die Listen zur Verfügung gestellt :: in dieser Art der Methodenaufruf wird die aktuelle Liste sortieren

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

    In diesem Fall x werden sortiert, also wenn Sie versuchen, x zu drucken es wird wie [1,2,2,3,3,1,4.5] sein.

Sie können eine dieser Methoden entsprechend Ihrer Anforderung verwenden.

Ich hoffe, es hilft. Happy Coding :)

+0

Versuchen Sie mit x = [1, 1.10, 1.11, 1.1, 1.2]. Sie erhalten eine falsche Ausgabe. – sathish

+0

@sathisch >>> x = [1, 1.10, 1.11, 1.1, 1.2] >>> sortiert (x) [1, 1.1, 1.1, 1.11, 1.2] >>> x.sort() > >> x [1, 1.1, 1.1, 1.11, 1.2] das ist der Ausgang, den ich bekam !! Ich denke, das ist die richtige Reihenfolge, nicht wahr? Wenn nicht, ich bin nicht wirklich gut in Mathe !! – San

+1

@sathish: '1.10' ist das gleiche wie' 1.1'. Hast du erwartet, dass es irgendwie anders als '1.1' sortiert wird? –

Verwandte Themen