← Все вопросы

Почему s[len(s)] даёт IndexError, хотя символ вроде есть?

Задан 5 месяцев назад422 просмотров3 ответа
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). Считаем с нуля.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект