Wenn ich mich nicht irre, wird eine Python-Zeichenfolge in Unicode-Skalaren gespeichert. Unicode-Skalare können jedoch zu anderen Graphem-Clustern kombiniert werden. Daher ist die Verwendung der Speicherverlagerung start + scalarSize * n
für string[n]
nicht die Antwort, die Sie suchen.Zeit Komplexität von Python-String-Index-Zugriff?
Bedeutet dies, dass Python linear durch jeden Skalar iteriert, um zu dem Skalar zu gelangen, nach dem Sie suchen? Wenn Sie
word = 'caf' + char(65) + char(301) #café
Does Python speichern diese als fünf Skalare und iterativ überprüfen, ob einer, bevor kombiniert werden soll oder hat sie einen Scheck beim Einsetzen und Laden ‚reinen‘ Skalare läuft?
Edit: Ich habe Python mit einer anderen Sprache verwechselt. Pythons print()
druckt Graphem-Cluster aus, aber Pythons str
speichert Skalare, egal wie Sie sie eingeben. Also werden zwei kombinierte Skalare als ein Graphem-Cluster gedruckt, der derselbe Cluster wie ein anderer Skalar sein kann. Wenn Sie string[0]
aufrufen, erhalten Sie den Skalar als eingefügt in die Zeichenfolge.
Sind Python nicht 3 Saiten utf-8 codiert? Wie erhalten Sie einen Codepunkt aus einer utf-8-Zeichenfolge in O (1) -Zeit? – sepp2k
@ sepp2k: Nein. Sie sind nicht. Innerhalb einer Zeichenfolge werden Codepunkte in einem Format mit fester Breite gespeichert. Ob dieses Format 1, 2 oder 4 Byte pro Codepunkt ist, hängt von der Zeichenfolge ab. – user2357112
Ich verstehe. Vielen Dank. – sepp2k