Базовая нарезка

Для любого итерируемого (например, строки, списка и т. Д.) Python позволяет нарезать и возвращать подстроку или подсписок своих данных.

Формат для нарезки:

 iterable_name[start:stop:step]
 

где,

  • start первый индекс среза. По умолчанию 0 (индекс первого элемента)

Примеры:

 a = "abcdef"
a            # "abcdef" 
             # Same as a[:] or a[::] since it uses the defaults for all three indices
a[-1]        # "f"
a[:]         # "abcdef" 
a[::]        # "abcdef" 
a[3:]        # "def" (from index 3, to end(defaults to size of iterable)) 
a[:4]        # "abcd" (from beginning(default 0) to position 4 (excluded)) 
a[2:4]       # "cd" (from position 2, to position 4 (excluded)) 

 

Кроме того, любой из вышеперечисленных может использоваться с определенным размером шага:

 a[::2]       # "ace" (every 2nd element)
a[1:4:2]     # "bd" (from index 1, to index 4 (excluded), every 2nd element)

 

Индексы могут быть отрицательными, и в этом случае они вычисляются с конца последовательности

 a[:-1]     # "abcde" (from index 0 (default), to the second last element (last element - 1))
a[:-2]     # "abcd" (from index 0 (default), to the third last element (last element -2))
a[-1:]     # "f" (from the last element to the end (default len()) 

 

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

 a[3:1:-1]   # "dc" (from index 2 to None (default), in reverse order)

 

Эта конструкция полезна для обращения итеративного

 a[::-1]     # "fedcba" (from last element (default len()-1), to first, in reverse order(-1))

 

Обратите внимание на то, что для отрицательных шагов по умолчанию end_index не None (см https://codecamp.ru/a/12521981 )

 a[5:None:-1] # "fedcba" (this is equivalent to a[::-1])
a[5:0:-1]    # "fedcb" (from the last element (index 5) to second element (index 1)