String-Vergleich-Technik verwendet, mit Python
Ich Frage mich, wie Python benötigt die string-Vergleich, genauer gesagt, wie es das Ergebnis bestimmt, wenn ein "kleiner als" ( <
) oder größer als ( >
) - operator verwendet.
Zum Beispiel, wenn ich print('abc' < 'bac')
bekomme ich True
. Ich verstehe, dass es vergleicht die entsprechenden Zeichen in der Zeichenfolge, aber seine unklar, warum es mehr, aus Mangel an einem besseren Begriff, "Gewicht" auf die Tatsache, dass a weniger als b (erste position) in der ersten string-vielmehr als die Tatsache, dass a kleiner als b ist in der zweiten saite (zweite position).
Was? Wie sonst kann die Bestellung definiert werden, die anderen als Links-nach-rechts?
rechts-nach-Links. Nicht, dass jemand das tun würde, aber es ist nicht die einzige Möglichkeit.
Wenn Sie erlauben, würden Sie gestatten, zufällige und sogar nur ungerade nur und jede andere Möglichkeit. Dann hätten Sie zu "parametrieren" der Bediener auswählen, welche Sie bestellen. Wenn es ein Standard, wie könnte es anderes sein als von Links nach rechts?
Ich Stimme zu-lex ist das einzig sinnvolle, um zu verwenden. Ich habe gerade nitpicked, dass es sicherlich nicht der einzige möglich order!
Um Ihre Frage zu beantworten, die Sie möglicherweise verwenden
rechts-nach-Links. Nicht, dass jemand das tun würde, aber es ist nicht die einzige Möglichkeit.
Wenn Sie erlauben, würden Sie gestatten, zufällige und sogar nur ungerade nur und jede andere Möglichkeit. Dann hätten Sie zu "parametrieren" der Bediener auswählen, welche Sie bestellen. Wenn es ein Standard, wie könnte es anderes sein als von Links nach rechts?
Ich Stimme zu-lex ist das einzig sinnvolle, um zu verwenden. Ich habe gerade nitpicked, dass es sicherlich nicht der einzige möglich order!
Um Ihre Frage zu beantworten, die Sie möglicherweise verwenden
sorted(range(10), key=lambda i: i ^ 123)
für zahlen oder sorted('How else can ordering be defined other than left-to-right?'.split(), key= lambda s: s[::-1])
für text. Sie sind definitiv (wenn hilfreich) Ordnungen.InformationsquelleAutor davelupt | 2011-01-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der docs:
Auch:
oder auf Python 2:
Als Beispiel:
Das Ergebnis
False
zurückgegeben wird, sobalda
gefunden wird, um weniger alsb
. Die weiteren Elemente sind nicht verglichen (wie man sehen kann, für den zweiten Artikel:b
>a
istTrue
).Sich bewusst sein, von unteren und Großbuchstaben:
'abc' < 'abcd'
.Vielen Dank für dieses, könnten hilfreich sein, hinzufügen, dass es funktioniert für die Anzahl Zeichenfolgen zu. Ich war nur mit diesem Thema
"24" > 40
=True
aufgrundord("2")
=50
Wow... das ist schön zu wissen! Klärt mein Missverständnis
Nur zu sparen andere Leute Lesen dein Kommentar die Lesen müssen, die Frage, die Sie verknüpfen, um die entsprechende Regel für Python 2 ist ", Wenn Sie die Reihenfolge ein numerischer und nicht-numerischer Datentyp, der numerische Typ kommt zuerst." (Python 3 wirft einen TypeError-Ausnahme statt, btw.)
gelöscht mein Kommentar insgesamt sparen Sie Jungs noch mehr Zeit.
InformationsquelleAutor user225312
Python string-Vergleich ist lexikografisch:
Aus Python Docs: http://docs.python.org/reference/expressions.html
Also in deinem Beispiel
'abc' < 'bac'
" a " kommt vor (weniger als) 'b' numerisch (ASCII-und Unicode-Darstellungen), so endet der Vergleich mit der rechten gibt.Ja. Entweder kleiner oder größer als. Wenn Sie gleich sind, werden die nächsten Elemente werden verglichen.
InformationsquelleAutor wkl
Python und so ziemlich jede andere Programmiersprache verwenden die gleichen Prinzipien wie (hoffe ich), die Sie verwenden würden, wenn die Suche nach einem Wort in einem gedruckten Wörterbuch:
(1) Abhängig von der Sprache der Menschen beteiligt, Sie haben eine Vorstellung von Charakter-Bestellung: 'a' < 'b' < 'c' etc
(2) Erste Zeichen hat mehr Gewicht als zweites Zeichen: 'az' < 'za' (egal ob die Sprache, die geschrieben wird von Links-nach-rechts oder von-rechts-nach-Links-oder boustrophedon ist ziemlich irrelevant)
(3) Wenn Sie ein Zeichen, um zu testen, die kürzere Zeichenfolge kleiner ist als der längere string: 'foo' < 'Essen'
In der Regel in einer computer-Sprache "der Begriff des Charakters Bestellung" ist eher primitiv: jeder Charakter hat eine Mensch-zu-Sprache-unabhängige Anzahl
ord(character)
und Zeichen verglichen und sortiert mit dieser Nummer. Oft, dass die Bestellung nicht geeignet ist, um die menschliche Sprache, die der Benutzer, und dann brauchen Sie, um zu "Sortieren", ein lustiges Thema.InformationsquelleAutor John Machin
Dies ist ein lexikographische Bestellung. Es legt einfach Dinge im Wörterbuch um.
'a' > 'z'
istTrue
während'a' > 'Z'
istFalse
InformationsquelleAutor Michael J. Barber
Nehmen Sie auch einen Blick auf Wie kann ich die Sortierung von unicode-Zeichenketten in alphabetischer Reihenfolge in Python?, wo die Diskussion über die Sortierung von Regeln, die durch die Unicode Collation Algorithm (http://www.unicode.org/reports/tr10/).
Antworten Sie auf den Kommentar
von S. Lott, es ist ein berühmtes Gegenbeispiel, beim Sortieren der französischen Sprache. Es beinhaltet die Akzente: in der Tat, man könnte sagen, dass in Französisch, Briefe sind sortiert von Links nach rechts und Akzente von rechts nach Links. Hier ist das Gegenbeispiel:
wir haben e < é und o < ï, so würden Sie erwarten, dass die Worte cote, côté, côte, côté werden so sortiert, als cote < coté < côte < côté. Gut, das ist nicht das, was passiert, in der Tat: cote < côte < coté < côté, D. H., wenn wir entfernen Sie "c" und "t", bekommen wir oe < " E < oé < ôé, das ist genau das rechts-nach-Links bestellen.
Und eine Letzte Bemerkung: Sie sollten nicht reden Links-rechts- und rechts-nach-Links - Sortieren, sondern über vorwärts und rückwärts Sortieren.
Tatsächlich gibt es Sprachen, die von rechts nach Links und wenn Sie denken, dass Arabisch und Hebräisch sind sortiert von rechts nach Links Sie können direkt aus einer grafischen Sicht, aber Sie sind falsch auf der logischen Ebene!
In der Tat, Unicode Auffassung Zeichenketten kodiert logischen Reihenfolge, - schreiben und-Richtung ist ein Phänomen Auftritt auf der glyph-Ebene. In anderen Worten, selbst wenn in den word-שלום den Buchstaben shin, erscheint auf der rechten Seite des gelähmten, logisch es tritt vor. Sortieren dieser Wörter, die man zuerst prüfen, Schienbein, dann die gelähmten, dann die vav, dann ist das mem, und das ist vorwärts Bestellung (obwohl Hebräisch geschrieben wird von rechts nach Links), während die französischen Akzente sind sortiert rückwärts (obwohl Französisch geschrieben ist von Links nach rechts).
InformationsquelleAutor yannis
Einer reinen Python-äquivalent für string-Vergleiche werden würde:
Diese Funktion stellt das äquivalent der echten Methode (Python-3.6 und Python 2.7) nur viel langsamer. Beachten Sie auch, dass die Umsetzung nicht gerade "pythonic" und funktioniert nur für
<
Vergleiche. Es ist nur zu zeigen, wie es funktioniert. Ich habe nicht überprüft, ob es funktioniert wie Pythons Vergleich für kombiniert mit unicode-Zeichen.Eine allgemeinere Variante wäre:
False
bedingungslos, das ist falsch, wennstring1
ist mehr alsstring2
(z.B.doggy
&dog
), die Sie brauchen, um zu überprüfen....Scheint richtig, was Sie sagen. Du meinst das hinzufügen einer
if len(string1) < len(string2): return True
vor der endgültigenreturn False
? Ich bin nicht an einem computer, die derzeit, also kann ich nicht überprüfen. Wird später 🙂Ja, Sie müssen einige Tests am Ende der Entscheidung, ob Sie zurück
False
oderTrue
nach wie entweder Sie haben erreicht das Ende der beiden strings (False
, weil Sie gleich sind),string1
ist länger (auchFalse
) oderstring2
ist länger (True
). Das ganze könnte kodiert werden alsreturn len(string1) < len(string2)
.Ich aktualisierte die Antwort. Danke!!!
InformationsquelleAutor MSeifert
Strings sind im Vergleich lexikographisch Verwendung der numerischen äquivalente (das Ergebnis der built-in-Funktion ord()) Ihrer Zeichen. Unicode und 8-bit-strings sind vollständig interoperabel dieses Verhalten.
InformationsquelleAutor Senthil Kumaran
Hier ist ein Beispielcode, der vergleicht zwei Zeichenketten lexikographisch.
für verschiedene Eingänge, die Ausgänge sind-
InformationsquelleAutor Dlucidone