когда использовать отрицательное число, чтобы нарезать строку в Python, 0 отключен?

скажем, у меня есть строка:

>>>a = 'akwkwas' >>> >>>a[-3:] 'was' >>>a[-3:None] 'was' >>>a[-3:0] '' 

почему я не могу использовать 0 в качестве конца среза?

это из документов:

Один из способов вспомнить, как работают срезы, – это учитывать индексы как указывающие между символами, причем левый край первого символа нумеруется 0. Тогда правый край последнего символа строки из n символов имеет индекс n, например:

  +---+---+---+---+---+---+ | P | y | t | h | o | n | +---+---+---+---+---+---+ 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1 

Первая строка чисел дает положение индексов 0 … 6 в строке; вторая строка дает соответствующие отрицательные индексы. Срез из i в j состоит из всех символов между краями с метками i и j соответственно.

поэтому, когда мы используем отрицательные индексы в цикле, мы должны проверить значение end, beacuse end 0 в отрицательных индексах не существует, например, когда мы разделяем строку на денежную строку:

 >>>a = '12349878334' >>>print(','.join([a[-i-3:-i if i else None] for i in range(0, len(a), 3)][::-1])) >>>12,349,878,334 

5 Solutions collect form web for “когда использовать отрицательное число, чтобы нарезать строку в Python, 0 отключен?”

0начало последовательности . Всегда, недвусмысленно. Изменение его значения иногда может привести к большому путанице, особенно при использовании переменных для этих двух значений.

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

Поскольку 0 всегда означает первый элемент последовательности, и нет никакой орфографии для отрицательного нуля, вы не можете использовать 0 для обозначения конца последовательности.

Вы можете использовать None в качестве элемента stop для обозначения этого вместо этого, если вам нужно параметризовать свои индексы:

 start = -3 stop = None result = a[start:stop] 

Поскольку -3 так же, как 4, что больше 0:

 In [8]: a = 'akwkwas' In [9]: a[-3:] Out[9]: 'was' In [10]: a[4:] Out[10]: 'was' In [11]: a[4:0] Out[11]: '' 

Глядя на вашу переменную:

a = 'was'

Вы уже знаете, что «w» находится в позиции 0, а также находится в позиции -3.

Когда вы пишете a[0:-3] , пишут Python обрезать строку, начинающуюся с индекса 0, и идти до индекса 0.

Помните, что второй аргумент говорит Python, который индексируется, чтобы останавливаться и не включаться. Этот аргумент в исключительных случаях, когда первый аргумент является инклюзивным .

Поскольку вы не можете использовать повторяющиеся индексы для нарезки, так как индекс начала строки равен 0 это может вызвать путаницу.

Предположим, хотите ли вы получить отрезки, ведущие к завершению, тогда вы должны сделать:

 my_string[0:0] 

который возвращает пустую строку.

 >>> my_string='example' >>> my_string[0:0] '' >>> 

Для получения дополнительной информации о разрезе python см. https://docs.python.org/2.3/whatsnew/section-slices.html.

Скучно использовать отрицательный срез в цикле, если есть шанс срезать «отрицательный ноль», потому что [: -0] не интерпретируется как ожидалось.

Но есть простой способ решить проблему, просто конвертируйте отрицательный индекс в положительный индекс, добавив длину контейнера.

Например, отрицательная петля для фрагментов:

 a = np.arange(10) for i in range(5): print(a[5-i:-i]) 

Ответ:

 [] [4 5 6 7 8] [3 4 5 6 7] [2 3 4 5 6] [1 2 3 4 5] 

Преобразуйте в позитив, добавив длину:

 for i in range(5): print(a[5-i:len(a)-i]) 

Получите правильный ответ:

 [5 6 7 8 9] [4 5 6 7 8] [3 4 5 6 7] [2 3 4 5 6] [1 2 3 4 5] 
  • Python 3 pyQt4 обновление GUI с переменными из нескольких модулей / классов
  • Почему параметр владельца по умолчанию для None отсутствует в __get__?
  • Как читать и редактировать электронные таблицы Google с помощью Python 3.x?
  • Как можно изменить синтаксис индексации списка python?
  • Web Crawler Чтобы получить ссылки с нового сайта
  • Как показать кадр данных pandas в виде таблицы с флеш-накопителем?
  • читать исходный ввод с клавиатуры в python
  • Tensorflow Нет модуля с именем _pywrap
  • Tkinter IntVar возвращает PY_VAR0 вместо значения
  • imaplib.select на большой почтовый ящик: слишком много аргументов для команды
  • Как изменить текст метки на языке киви с помощью python
  • Python - лучший язык программирования в мире.