Eine pythischere Art, diesen Ausdruck zu schreiben?

8

Ich sollte eine Liste von Wörtern nehmen und sortieren, außer dass ich alle Strings gruppieren muss, die mit 'x' beginnen.

Folgendes habe ich bekommen:

%Vor%

Aber ich habe das Gefühl, dass es einen viel eleganteren Weg gibt, dies zu tun ...

BEARBEITEN

Beispiel: ['mix', 'xyz', 'apple', 'xanadu', 'aardvark'] ergibt ['xanadu', 'xyz', 'aardvark', 'apple', 'mix'] .

    
helpermethod 02.11.2010, 11:41
quelle

8 Antworten

41
%Vor%

Erläuterung: Die Schlüsselfunktion gibt ein Paar (Tupel) zurück. Das erste Element ist False oder True , abhängig davon, ob das erste Zeichen in der Zeichenfolge 'x' ist. False sortiert vor True , daher beginnen Zeichenfolgen, die mit 'x' beginnen, zuerst in der sortierten Ausgabe. Das zweite Element im Tupel wird verwendet, um zwei Elemente zu vergleichen, die im ersten Element identisch sind, so dass alle mit 'x' beginnenden Strings untereinander sortiert werden und alle Strings, die nicht mit 'x' beginnen, sortiert werden unter sich.

    
SilentGhost 02.11.2010, 11:49
quelle
9

Erstens: Hör auf "pythisch" zu sagen, wenn du "sauber" meinst. Es ist nur ein käsiges Schlagwort.

Verwenden Sie keine ternären Ausdrücke wie diese; Es soll als Teil eines Ausdrucks verwendet werden, nicht als Flusskontrolle. Das ist sauberer:

%Vor%

Sie können es noch etwas verbessern - ternäre Ausdrücke wie diese zu verwenden ist in Ordnung:

%Vor%

Wenn words ein Container und kein Iterator ist, könnten Sie Folgendes verwenden:

%Vor%

Schließlich können wir die ganze Sache verschrotten und stattdessen zwei Arten verwenden:

%Vor%

sortiert zuerst normal und verwendet dann die stable-Eigenschaft von Python-Sortierungen, um Wörter, die mit "x" beginnen, nach vorne zu verschieben, ohne die Reihenfolge zu ändern.

    
Glenn Maynard 02.11.2010 11:50
quelle
6
%Vor%     
demas 02.11.2010 11:45
quelle
5

Es sollte beachtet werden, dass sorted in Python 2.4 hinzugefügt wurde. Wenn Sie eine kürzere Version möchten, die etwas sauberer und etwas abwärtskompatibler ist, können Sie alternativ die Funktion .sort() direkt von list verwenden. Es sollte auch beachtet werden, dass leere Strings eine Ausnahme auslösen, wenn sie in diesem Fall x[0] style Array-Indexierungssyntax verwenden (wie viele Beispiele). .startswith() sollte stattdessen verwendet werden, wie in Tony Veijalainen's Antwort richtig verwendet wird .

> %Vor%

Der einzige Nachteil ist, dass Sie das gegebene Objekt mutieren. Dies kann behoben werden, indem Sie die Liste vorher in Scheiben schneiden.

%Vor%     
akdom 03.11.2010 06:39
quelle
2
%Vor%     
Frost.baka 02.11.2010 11:48
quelle
2

So senden Sie den SilenGhosts-Code (kopieren Sie ruhig, SilentGhost) als Code nicht an die Eingabeaufforderung log

%Vor%     
Tony Veijalainen 02.11.2010 16:06
quelle
1
%Vor%     
user225312 02.11.2010 11:49
quelle
0

Mehr in Richtung Ihrer ursprünglichen Lösung:

%Vor%     
Pete Fein 03.11.2010 05:37
quelle

Tags und Links