Страницы

Поиск по вопросам

вторник, 11 июня 2019 г.

Почему при индексах [1],[2] и [-1],[-2] дает одинаковые результаты

>>> c=bob[0].split() >>> c ['Bob', 'Smith'] >>> c[1] 'Smith' >>> c[0] 'Bob' >>> c[-1] 'Smith' >>> c[-2] 'Bob'


Ответ

Некоторые типы в Python вроде списков и строк поддерживают отрицательные индексы. Они позволяют брать элементы с конца: c[-1] это последний элемент, c[-2] предпоследний и так далее. Отрицательные индексы можно переписать на вычисление положительного индекса, примерно так: c[len(c) - 1], c[len(c) - 2] и так далее.
В документации Python есть наглядная диаграммка, показывающая, как нумеруются символы в строке (для списков тоже применимо):
+---+---+---+---+---+---+ | P | y | t | h | o | n | +---+---+---+---+---+---+ 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1
Тем не менее, проверка на выход за пределы списка/строки всё ещё имеется:
>>> s = 'Python'
>>> s[6] Traceback (most recent call last): File "", line 1, in IndexError: string index out of range
>>> s[-7] Traceback (most recent call last): File "", line 1, in IndexError: string index out of range
Кстати, с помощью расширенного синтаксиса срезов можно перевернуть список, если указать отрицательный шаг:
>>> c = ['Bob', 'Smith'] >>> c[::-1] ['Smith', 'Bob']

Комментариев нет:

Отправить комментарий