O poder da notação de fatiamento em Python

Na Sophilabs, temos muita experiência trabalhando com Python e Django. Hoje exploraremos mais a fundo a versatilidade da notação de fatiamento. É um recurso importante que pode ajudar você a obter rapidez e legibilidade no código, como mostraremos a seguir.
Vamos começar...
O que a notação de fatiamento faz?
A notação de fatiamento é um recurso integrado do Python que permite acessar partes de qualquer string, lista ou tupla. Você pode até modificar ou excluir os itens de sequências mutáveis, como listas.
Por exemplo, vamos ver como isso funciona com uma lista chamada my_list:
# [0,1,2,3,4,5,6,7,8,9]
my_list = range(10)
# would make a copy of all the list [0,1,2,3,4,5,6,7,8,9]
my_list[:]
# a copy from the start position through the rest of the list
my_list[start:]
# eg. my_list[1:] => [1,2,3,4,5,6,7,8,9]
# a copy from the beginning through stop -1
my_list[:stop]
# eg. my_list[:1] => [0]
# a copy from the start position through stop -1
my_list[start:stop]
# eg. my_list[1:8] => [1,2,3,4,5,6,7]
A sintaxe completa inclui uma opção de passo: eg. my_list[start:stop:step]. Você pode usá-la para pular valores. Se o passo for omitido na declaração, seu valor padrão será 1.
Esse conceito pode ir além quando a sintaxe usa a notação estendida:
# this will generate a new copy skipping the elements by the value of the step
my_list[::step]
# eg. my_list[::2] => [0,2,4,6,8]
Uso de valores negativos
Uma das grandes vantagens do Python é permitir valores negativos como índices, e a notação de fatiamento não é uma exceção.
Vamos voltar ao último exemplo:
# will return the last element of the list
my_list[-value]
# eg. my_list[-2] => 8
# The last start elements of the list
my_list[-start:]
# eg. my_list[-2:] => [8, 9]
# will return everything except last stop elements of the list
my_list[:-stop]
# eg. my_list[:-2] => [0,1,2,3,4,5,6,7]
Da mesma forma, com a versão estendida que usa passos, você pode retornar uma nova lista em ordem inversa usando valores negativos na opção de passo:
my_list[::-step]
# eg. my_list[::-1] => [9,8,7,6,5,4,3,2,1,0]
# eg. my_list[::-2] => [9,7,5,3,1]
Isso significa que podemos fazer combinações muito flexíveis que alteram a ordem da lista. Além disso, podemos gerar novas estruturas facilmente com a notação de fatiamento, tornando o código mais versátil e legível.
Relação com o objeto Slice()
my_list[start:stop:step] is equivalent to my_list[slice(start, stop, step)]
Para omitir qualquer argumento, em slice() deve-se usar None. Por exemplo:
# eg. my_list[::-2] => my_list[slice(None, None, -2)]
Aplicamos a notação de fatiamento de várias maneiras e, como você pode ver, ela é uma ferramenta muito poderosa. Exploramos alguns conceitos básicos, mas isso é apenas a ponta do iceberg: use o recurso nos seus projetos e descubra todo o seu potencial.