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']
.
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.
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:
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.
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 .
Der einzige Nachteil ist, dass Sie das gegebene Objekt mutieren. Dies kann behoben werden, indem Sie die Liste vorher in Scheiben schneiden.
%Vor%So senden Sie den SilenGhosts-Code (kopieren Sie ruhig, SilentGhost) als Code nicht an die Eingabeaufforderung log
%Vor%