Wie bekomme ich char von String nach Index?

86

Nehmen wir an, ich habe eine Zeichenfolge, die aus x unbekannten Zeichen besteht. Wie könnte ich char nr bekommen. 13 oder char nr. x-14?

TheBW
quelle

Antworten:

123

Stellen Sie zunächst sicher, dass die erforderliche Nummer von Anfang oder Ende an ein gültiger Index für die Zeichenfolge ist, und verwenden Sie dann einfach die Array-Indexnotation. Verwenden Sie len(s)diese Option, um die Zeichenfolgenlänge abzurufen

>>> s = "python"
>>> s[3]
'h'
>>> s[6]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> s[0]
'p'
>>> s[-1]
'n'
>>> s[-6]
'p'
>>> s[-7]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> 
DhruvPathak
quelle
1
Sie können negative ganze Zahlen übergeben
Aviram Segal
@AviramSegal Danke für die Korrektur, ja wir können, aber sie sollten auch in den Grenzen der Stringlänge liegen.
DhruvPathak
1
Nach Ihrer Bearbeitung ist es die beste Antwort, nach oben statt nach unten gestimmt :)
Aviram Segal
1
Diese Antwort könnte verbessert werden, indem an jedem Index ein anderes Wort mit eindeutigen Zeichen verwendet wird. So wie es aussieht, ist s [3] nicht eindeutig, welches 'l' es zurückgibt.
wenn NewQuestion abstimmen SCHLIESSEN 20.
1
Warum s[-5]kann funktionieren, s[-6]würde aber einen Indexfehler außerhalb des Bereichs beanstanden? So neugierig auf die Implementierung im String-Objekt in Python.
Alston
5
In [1]: x = "anmxcjkwnekmjkldm!^%@(*)#_+@78935014712jksdfs"
In [2]: len(x)
Out[2]: 45

Für positive Indexbereiche für x liegt der Wert zwischen 0 und 44 (dh Länge - 1).

In [3]: x[0]
Out[3]: 'a'
In [4]: x[45]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)

/home/<ipython console> in <module>()

IndexError: string index out of range

In [5]: x[44]
Out[5]: 's'

Für den negativen Index reicht der Index von -1 bis -45

In [6]: x[-1]
Out[6]: 's'
In [7]: x[-45]
Out[7]: 'a

Bei negativem Index gibt negativ [Länge -1], dh der letzte gültige Wert des positiven Index, das zweite Listenelement an, wenn die Liste in umgekehrter Reihenfolge gelesen wird.

In [8]: x[-44]
Out[8]: 'n'

Andere, Indexbeispiele,

In [9]: x[1]
Out[9]: 'n'
In [10]: x[-9]
Out[10]: '7'
avasal
quelle
Sie sollten eine verbale Beschreibung des Geschehens geben, auch wenn Ihnen die Frage grundlegend erscheint.
Hannele
Aktualisierte die Antwort mit einer Beschreibung, hoffe es hilft :)
avasal
3

Frühere Antworten beziehen sich ASCII characterauf einen bestimmten Index.

Es ist ein bisschen mühsam, Unicode characterin Python 2 einen bestimmten Index zu erhalten.

ZB mit s = '한국中国にっぽん'dem ist <type 'str'>,

__getitem__z. B. s[i]führt Sie nicht dorthin, wo Sie es wünschen. Es wird so etwas wie ausspucken . (Viele Unicode-Zeichen sind mehr als 1 Byte, __getitem__in Python 2 wird sie jedoch um 1 Byte erhöht.)

In diesem Python 2-Fall können Sie das Problem durch Decodieren lösen:

s = '한국中国にっぽん'
s = s.decode('utf-8')
for i in range(len(s)):
    print s[i]
GyuHyeon Choi
quelle
2

Python.org hat einen ausgezeichneten Abschnitt Strings hier . Scrollen Sie nach unten zu "Slice Notation".

Joel Cornett
quelle
1

Eine weitere empfohlene Übung zum Verständnis von Listen und Indizes:

L = ['a', 'b', 'c']
for index, item in enumerate(L):
    print index + '\n' + item

0
a
1
b
2
c 
Droogans
quelle
0

Dies sollte die Punkte weiter verdeutlichen:

a = int(raw_input('Enter the index'))
str1 = 'Example'
leng = len(str1)
if (a < (len-1)) and (a > (-len)):
    print str1[a]
else:
    print('Index overflow')

Eingang 3 Ausgang m

Eingang -3 Ausgang p

Arnab Ghosal
quelle
0

Ich denke, das ist klarer als es in Worten zu beschreiben

s = 'python'
print(len(s))
6
print(s[5])
'n'
print(s[len(s) - 1])
'n'
print(s[-1])
'n'
Existenzillusion
quelle