Fatiamento em Python (slicing): strings, listas e tuplas
Este tutorial foi traduzido do original em inglês.Read in EnglishLeer en españolЧитать на русскомอ่านภาษาไทยAvisar sobre um erro de tradução
Imagine uma pizza cortada em 8 fatias, numeradas de 0 a 7. Nem sempre você quer a pizza inteira. Às vezes você quer as fatias de 2 a 5. Às vezes quer uma fatia sim, outra não. Às vezes quer as três últimas fatias.
O fatiamento (slicing) do Python permite pegar um pedaço de qualquer sequência (uma lista, uma string ou uma tupla) usando a mesma notação simples. É um dos recursos mais elegantes do Python e, depois que você aprende, passa a usá-lo em todo lugar.
Neste tutorial, você vai aprender a notação start:stop:step (início, fim e passo), como funcionam os índices negativos, como inverter qualquer sequência e os padrões de fatiamento mais comuns, que os desenvolvedores Python usam todos os dias.
Como funciona o fatiamento básico?
A sintaxe básica de uma fatia é sequence[start:stop]. Ela devolve os itens a partir do índice start até o índice stop, mas sem incluí-lo. Pense nisso como um intervalo semiaberto.
['banana', 'cherry'] ['apple', 'banana', 'cherry'] ['cherry', 'date', 'elderberry']
A regra de "parar antes" pode parecer estranha no começo. Mas ela tem uma vantagem: fruits[0:3] devolve exatamente 3 itens. Em uma fatia simples [start:stop] em que 0 <= start <= stop <= len(fruits), o número de itens é stop - start.
[10, 20, 30] [40, 50, 60] [10, 20, 30, 40, 50, 60]
O que faz o parâmetro step?
A sintaxe completa de uma fatia é sequence[start:stop:step]. O step (passo) controla o tamanho do salto entre os itens que você pega. Um passo 2 pega um item sim, outro não. Um passo 3 pega um item a cada três.
[0, 2, 4, 6, 8] [1, 3, 5, 7, 9] [0, 3, 6, 9] [1, 3, 5]
Se você deixar de fora o start e o stop, um passo positivo cobre a sequência inteira, do começo ao fim. Um passo negativo inverte esses padrões e começa pelo final, como você vai ver abaixo. Você só precisa informá-los se quiser restringir o intervalo.
Como funcionam os índices negativos no fatiamento?
Índices negativos contam a partir do fim da sequência. -1 é o último item, -2 é o penúltimo, e assim por diante. Você pode usar números negativos em qualquer parte da fatia: start, stop ou step.
['d', 'e', 'f'] ['a', 'b', 'c', 'd'] ['e', 'f']
Índices negativos são extremamente úteis quando você quer itens contados a partir do fim. Por exemplo, my_list[-3:] sempre devolve os três últimos itens, seja qual for o tamanho da lista.
ytho thon Py
Como inverter uma sequência com [::-1]
Um passo negativo diz ao Python para andar para trás. O padrão mais comum é [::-1], que inverte a sequência inteira. Sem início, sem fim, passo -1: vai do fim até o começo.
[5, 4, 3, 2, 1] olleh (40, 30, 20, 10)
Você pode combinar um passo negativo com início e fim para inverter só uma parte. Com um passo negativo, o start deve ser maior que o stop, já que você está andando para trás.
[7, 6, 5, 4, 3] [9, 7, 5, 3, 1]
Fatiando strings, listas e tuplas
A mesma sintaxe [start:stop:step] funciona em todos os tipos de sequência. A única diferença é o que você recebe de volta: fatiar uma lista devolve uma lista, fatiar uma string devolve uma string e fatiar uma tupla devolve uma tupla.
Alex <class 'str'> [85, 77, 92] (10, 30, 50)
Padrões de fatiamento que todo desenvolvedor Python deve conhecer
Estes são os padrões de fatiamento que você mais vai ver e usar. Pense nisto como sua referência rápida.
['a', 'b', 'c'] ['e', 'f', 'g'] ['b', 'c', 'd', 'e', 'f', 'g'] ['a', 'b', 'c', 'd', 'e', 'f'] ['b', 'c', 'd', 'e', 'f'] ['g', 'f', 'e', 'd', 'c', 'b', 'a']
Você também pode usar o fatiamento do lado esquerdo de uma atribuição para substituir um trecho de uma lista. Isso se chama atribuição por fatia (slice assignment).
['red', 'lime', 'sky', 'yellow', 'purple'] ['red', 'orange', 'yellow', 'purple']
Exercícios práticos
Dada a lista animals, use fatiamento para exibir só os três itens do meio: ['cat', 'dog', 'elephant'].
O que este código exibe? Pense bem nos índices negativos.
word = 'programming'
print(word[-4:])Escreva uma instrução print() que produza exatamente a mesma saída.
Dada a lista letters, use fatiamento com passo para exibir só os itens nos índices pares (0, 2, 4, 6). O resultado deve ser ['a', 'c', 'e', 'g'].
Use fatiamento para inverter a string word e exiba o resultado. A saída deve ser nohtyp.
Este código tenta pegar os três últimos itens de uma lista, mas está usando a fatia errada. Corrija o bug para que ele exiba ['date', 'elderberry', 'fig'].
Escreva uma função chamada is_palindrome(text) que retorne True se o texto for lido igual de frente para trás e de trás para frente, e False caso contrário. Use fatiamento para inverter a string. Converta o texto para minúsculas antes, para que a verificação não diferencie maiúsculas de minúsculas.
Teste com estas chamadas:
print(is_palindrome('racecar'))
print(is_palindrome('Python'))
print(is_palindrome('Madam'))