← Все вопросы
Почему s[len(s)] даёт IndexError, хотя символ вроде есть?
9
Хочу взять последний символ строки:
s = "hello"
last = s[len(s)]
Получаю IndexError: string index out of range. Но в строке же 5 символов?
3 ответа
18
✓ Принятый ответ — помог автору
Индексы в Python начинаются с 0. У строки "hello" длиной 5 валидные индексы — это 0, 1, 2, 3, 4. А len(s) равно 5 — такого индекса уже нет, последний элемент стоит на позиции len(s) - 1.
Поэтому:
last = s[len(s) - 1] # 'o'
или, что гораздо удобнее в Python, отрицательный индекс:
last = s[-1] # 'o'
s[-1] всегда последний, s[-2] предпоследний и т.д. — так почти никогда не промахнёшься на «один».
Олег Захаров Та самая ошибка «off by one», самая популярная в мире 🙂 · 5 месяцев назад
8
s[-1].
4
Последний индекс — len(s)-1, а не len(s). Считаем с нуля.
Ваш ответ
Войдите, чтобы ответить на вопрос.