Як отримати char з рядка за індексом?


91

Скажімо, у мене є рядок, який складається з x невідомих символів. Як я міг отримати номер пп. 13 або познач. х-14?

Відповіді:


129

Спочатку переконайтеся, що потрібне число є дійсним індексом для рядка з початку чи кінця, а потім ви можете просто використовувати нотацію індексу масиву. використовуйте len(s)для отримання довжини рядка

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

1
Ви можете передавати від’ємні цілі числа
Авірам Сегал

@AviramSegal Дякуємо за виправлення. Так, ми можемо, але вони також повинні бути в межах довжини рядка.
DhruvPathak

1
після вашої редагування її найкраща відповідь, проголосував вгору, а не вниз :)
Aviram Segal

1
Цю відповідь можна покращити, використовуючи інше слово з унікальними символами в кожному індексі. На даний момент s [3] неоднозначно щодо того, яке «l» він повертає.
Будьте добрими до нових користувачів

1
Чому s[-5]може працювати, але s[-6]скаржиться на індекс помилки поза діапазоном? Так цікаво про реалізацію в рядковому об'єкті в Python.
Алстон,

5
In [1]: x = "anmxcjkwnekmjkldm!^%@(*)#_+@78935014712jksdfs"
In [2]: len(x)
Out[2]: 45

Тепер для позитивних індексів діапазон для x становить від 0 до 44 (тобто довжина - 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'

Для негативного індексу індекс коливається від -1 до -45

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

Для від'ємного індексу від'ємний [довжина -1], тобто останнє дійсне значення позитивного індексу дасть другий елемент списку, оскільки список читається в зворотному порядку,

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

Інші, приклади індексу,

In [9]: x[1]
Out[9]: 'n'
In [10]: x[-9]
Out[10]: '7'

Ви повинні запропонувати певний словесний опис того, що відбувається, хоча питання може здатися вам основним.
Hannele

Оновив відповідь якимось описом, сподіваюся, що це допоможе :)
avasal

3

Попередні відповіді стосуються ASCII character за певним показником.

Трохи клопітно отримати Unicode character з певним індексом у Python 2 складно.

Наприклад, з s = '한국中国にっぽん'яким є<type 'str'> ,

__getitem__, наприклад, s[i]не веде вас туди, куди ви бажаєте. Це виплюне щось на зразок . (Багато символів Unicode мають більше 1 байта, але__getitem__ в Python 2 збільшується на 1 байт.)

У цьому випадку Python 2 ви можете вирішити проблему, розшифрувавши:

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


1

Інший рекомендований досвід для розуміння списків та покажчиків:

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

0
a
1
b
2
c 

0

Це має додатково пояснити моменти:

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

Вхід 3 Вихід m

Вхід -3 Вихід с


0

Я думаю, це зрозуміліше, ніж описувати це словами

s = 'python'
print(len(s))
6
print(s[5])
'n'
print(s[len(s) - 1])
'n'
print(s[-1])
'n'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.