когда использовать отрицательное число, чтобы нарезать строку в 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] 
  • Alexa запрашивает подтверждение в python
  • Django: MEDIA_URL не установлен в шаблоне
  • копия и глубокая копия: семантика
  • Печать имен переменных, переданных функции
  • как проверить, позволяет ли итерабельность более одного прохода?
  • Как изменить формат сообщения журнала Python на основе каждого регистратора?
  • Python: значение end = '' в print print ("\ t", end = '')
  • Установка Python 3.3 на Cygwin
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.