Python .sort () funktioniert nicht wie erwartet

7

In einer ruhigen Samstagnacht ein paar Rätselprobleme lösen (wooohoo ... nicht) und mich mit sort () abmühen. Die Ergebnisse sind nicht ganz das, was ich erwarte. Das Programm durchläuft jede Kombination von 100 - 999 und prüft, ob das Produkt ein Palindom ist. Wenn dies der Fall ist, fügen Sie sie der Liste hinzu. Ich brauche die Liste sortiert: D Hier ist mein Programm:

%Vor%

welche Netze:

%Vor%

Klar Index 0 ist größer als 1. Irgendeine Idee was ist los? Ich habe das Gefühl, dass es etwas mit nachlaufenden / führenden Nullen zu tun hat, aber ich habe mich kurz umgeschaut und kann das Problem nicht sehen.

Bonuspunkte, wenn du weißt, wo das Puzzle herkommt: P

    
Dominic Bou-Samra 03.10.2009, 13:22
quelle

8 Antworten

20

Sie sortieren Zeichenketten, nicht Zahlen. '101101' < '10201' weil '1' < '2' . Ändere list.append(reversed) in list.append(int(reversed)) und es funktioniert (oder verwende eine andere Sortierfunktion).

    
Lukáš Lalinský 03.10.2009, 13:25
quelle
11

Sort macht seine Arbeit. Wenn Sie beabsichtigen, ganze Zahlen in der Liste zu speichern, nehmen Sie Lukáš-Rat. Sie können auch sortieren, wie Sie sortieren, zum Beispiel indem Sie ints machen:

%Vor%

Der Schlüsselparameter verwendet eine Funktion, die ein Element berechnet, um den Platz des Listenobjekts in allen Vergleichen zu übernehmen. Eine Ganzzahl wird numerisch wie erwartet verglichen.

( list ist übrigens ein wirklich schlechter Variablenname, da Sie den eingebauten list () -Typ überschreiben!)

    
u0b34a0f6ae 03.10.2009 13:45
quelle
2

Ihre Liste enthält Zeichenfolgen, so dass sie alphabetisch sortiert werden. Versuchen Sie, die Liste in Ganzzahlen umzuwandeln und sortieren Sie dann.

    
Justin Ethier 03.10.2009 13:28
quelle
1

Sie sortieren Strings, keine Zahlen. Strings vergleichen von links nach rechts.

    
pzr 03.10.2009 13:28
quelle
1

Keine Konvertierung in int erforderlich. mult ist bereits ein int und wie du es überprüft hast ist es ein Palindrom, es wird genauso aussehen wie umgekehrt, also einfach:

%Vor%     
Neil 12.11.2009 11:04
quelle
0

Sie haben Ihre Zahlen als Strings gespeichert, also python sortiert sie entsprechend. Also: '101x' kommt vor '102x' (genauso wie 'abcd' vor 'az' kommt).

    
Dana 03.10.2009 13:26
quelle
0

Nein, es wird richtig sortiert, nur dass es lexographisch sortiert und Sie möchten numerisch sortieren. Entfernen Sie also "str ()"

    
aviraldg 03.10.2009 13:26
quelle
0

Der Vergleichsoperator behandelt Ihre Eingabe als Zeichenfolgen anstelle von Ganzzahlen. In Saitenvergleich 2 ist der 3. Buchstabe lexikalisch größer als 1. reversed = str(mult)[::-1]

    
whatnick 03.10.2009 13:28
quelle

Tags und Links