Почему индекс подрезки за пределами диапазона работает в Python?

Почему 'example'[999:9999] приводит к ошибке? Поскольку 'example'[9] делает, какова мотивация этого?

Из этого поведения я могу предположить, что 'example'[3] по существу / внутри не совпадает с 'example'[3:4] , хотя оба результата приводят к одной и той же строке 'm' .

3 Solutions collect form web for “Почему индекс подрезки за пределами диапазона работает в Python?”

Вы в основном ответили на свой вопрос. Нарезка за пределами последовательности (по крайней мере для встроенных) не вызывает ошибки. Это имеет смысл, когда вы об этом думаете. Индексирование возвращает один элемент, но нарезка возвращает подпоследовательность элементов. Поэтому, когда вы пытаетесь индексировать несуществующее значение, ничего не вернуть; но когда вы вырезаете последовательность за пределами границ, вы можете вернуть пустую последовательность.

Также обратите внимание, что между x[3] и x[3:4] существует общая разница. Например:

 >>> [0, 1, 2, 3, 4, 5][3] 3 >>> [0, 1, 2, 3, 4, 5][3:4] [3] 

Причина, по которой они выглядят одинаково в случае строк, заключается в том, что не существует такой вещи, как отдельный символ вне строки; один символ – это всего лишь 1-символьная строка.

Ради добавления ответа, который указывает на надежный раздел документации :

Учитывая выражение среза, подобное s[i:j:k] ,

Кусочек s от i до j с шагом k определяется как последовательность элементов с индексом x = i + n * k, для которых 0 <= n <(ji) / k. Другими словами, индексы i, i + k, i + 2 * k, i + 3 * k и т. Д., Останавливаясь, когда j достигнуто (но никогда не включает j). Когда k положительно, i и j сводятся к len (s), если они больше

если вы пишете s[999:9999] , python возвращает s[len(s):len(s)] с len(s) < 999 и ваш шаг положительный ( 1 – значение по умолчанию).

Нарезка не ограничена – проверяется встроенными типами. И хотя оба ваших примера, похоже, имеют одинаковый результат, они работают по-другому; попробуйте их вместо списка.

  • Каков наиболее эффективный способ в Python преобразовать строку во все строчные буквы, удаляя все альфа-символы без ascii?
  • Python, добавить конечную косую черту в строку каталога, os независимо
  • Есть ли константа Python для Unicode-пробелов?
  • Извлечение определенных символов из строки
  • Печать определенных частей строки в python
  • rreplace - Как заменить последнее вхождение выражения в строку?
  • Строковый класс Python, такой как StringBuilder в C #?
  • Проблема с Python 2 re.sub
  • Однострочный код Python для установки строки в 0, если пустой
  • Найти последнюю подстроку после символа
  • Как заменить строку из предыдущей строки с помощью \ r (Python)
  • Python - лучший язык программирования в мире.