Jak pobrać znak z ciągu według indeksu?

91

Powiedzmy, że mam ciąg składający się z x nieznanych znaków. Jak mogłem dostać char nr. 13 lub char nr. x-14?

TheBW
źródło

Odpowiedzi:

129

Najpierw upewnij się, że wymagana liczba jest prawidłowym indeksem dla ciągu od początku lub końca, a następnie możesz po prostu użyć notacji z indeksem tablicy. użyj, len(s)aby uzyskać długość łańcucha

>>> 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
źródło
1
Możesz podać ujemne liczby całkowite
Aviram Segal
@AviramSegal Dzięki za korektę, tak możemy, ale powinny też być w granicach długości struny.
DhruvPathak
1
po Twojej edycji to najlepsza odpowiedź, zagłosowano w górę zamiast w dół :)
Aviram Segal
1
Tę odpowiedź można poprawić, używając innego słowa z unikalnymi znakami w każdym indeksie. W obecnej postaci s [3] nie jest jednoznaczne, do którego „l” wraca.
Bądź miły dla nowych użytkowników
1
Dlaczego s[-5]może działać, ale s[-6]narzekałby na błąd indeksu poza zakresem? Tak ciekawi implementacji w obiekcie string w Pythonie.
Alston
5
In [1]: x = "anmxcjkwnekmjkldm!^%@(*)#_+@78935014712jksdfs"
In [2]: len(x)
Out[2]: 45

Teraz dla dodatnich zakresów indeksów dla x wynosi od 0 do 44 (tj. Długość - 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'

W przypadku indeksu ujemnego zakres indeksu wynosi od -1 do -45

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

Dla indeksu ujemnego, ujemnego [długość -1], czyli ostatnia ważna wartość dodatniego indeksu da drugi element listy, gdy lista jest czytana w odwrotnej kolejności,

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

Inne przykłady indeksu,

In [9]: x[1]
Out[9]: 'n'
In [10]: x[-9]
Out[10]: '7'
avasal
źródło
Powinieneś przedstawić słowny opis tego, co się dzieje, nawet jeśli pytanie może wydawać się proste.
Hannele
Zaktualizowałem odpowiedź o jakiś opis, mam nadzieję, że to pomoże :)
avasal
3

Poprzednie odpowiedzi obejmują ASCII characterpewien indeks.

Uzyskanie Unicode characterat określonego indeksu w Pythonie 2 jest trochę kłopotliwe .

Np. Z s = '한국中国にっぽん'którym jest <type 'str'>,

__getitem__, np., s[i]nie prowadzi cię tam, gdzie chcesz. Wypluje coś jak . (Wiele znaków Unicode ma więcej niż 1 bajt, ale __getitem__w Pythonie 2 jest zwiększana o 1 bajt).

W tym przypadku Pythona 2 możesz rozwiązać problem poprzez dekodowanie:

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

Python.org ma doskonały punkt na sznurkach tutaj . Przewiń w dół do miejsca, w którym jest napisane „notacja plasterka”.

Joel Cornett
źródło
1

Inne zalecane ćwiczenie ułatwiające zrozumienie list i indeksów:

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

0
a
1
b
2
c 
Droogans
źródło
0

Powinno to dodatkowo wyjaśnić kwestie:

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')

Wejście 3 Wyjście m

Wejście -3 Wyjście str

Arnab Ghosal
źródło
0

Myślę, że jest to bardziej jasne niż opisywanie tego słowami

s = 'python'
print(len(s))
6
print(s[5])
'n'
print(s[len(s) - 1])
'n'
print(s[-1])
'n'
Istnienie iluzja
źródło