Fatiamento Python em profundidade

Resumo : neste tutorial, você aprenderá sobre o fatiamento do Python e como usá-lo para extrair e atribuir dados a uma sequência.

Revisão de fatiamento Python

Até agora você aprendeu sobre fatiamento, como fatiamento de lista .

Tecnicamente, o fatiamento depende da indexação. Portanto, o fatiamento só funciona com tipos de sequência .

Para tipos de sequência mutáveis, como lists , você pode usar o fatiamento para extrair e atribuir dados. Por exemplo:

colors = ['red', 'green', 'blue', 'orange']

# extract data
print(colors[1:3])

# assign data
colors[1:3] = ['pink', 'black']
print(colors)Linguagem de código:  PHP  ( php )

Saída:

['green', 'blue']
['red', 'pink', 'black', 'orange']Linguagem de código:  JSON/JSON com comentários  ( json )

No entanto, você pode usar o fatiamento para extrair dados de sequências imutáveis. Por exemplo:

topic = 'Python Slicing'

# Extract data
print(topic[0:6])Linguagem de código:  PHP  ( php )

Saída:

Python

Se você tentar usar o fatiamento para atribuir dados a uma sequência imutável, receberá um erro. Por exemplo:

topic[0:6] = 'Java'Linguagem de código:  JavaScript  ( javascript )

Erro:

TypeError: 'str' object does not support item assignmentLinguagem de código:  JavaScript  ( javascript )

O fatiamento seq[start:stop]retorna os elementos começando no índice startaté o índice stop - 1. Portanto, é mais fácil visualizar que os índices estão entre os elementos quando você fatia a sequência:

Fatiamento Python

Tipo de fatia Python

Tudo em Python é um objeto, incluindo a fatia. Uma fatia é na verdade um objeto do slicetipo. Quando você usa a notação de fatiamento:

seq[start:stop]
Linguagem de código:  CSS  ( css )

O start:stopé um sliceobjeto.

slice(start, stop)

Por exemplo:

s = slice(1, 3)

print(type(s))
print(s.start, s.stop)Linguagem de código:  PHP  ( php )

Saída:

<class 'slice'>
1 3Linguagem de código:  HTML, XML  ( xml )

Então, em vez de usar a notação de fatiamento:

colors[1:3]
Linguagem de código:  CSS  ( css )

… você pode usar o objeto slice:

colors = ['red', 'green', 'blue', 'orange']
s = slice(1, 3)

print(colors[s])Linguagem de código:  PHP  ( php )

Saída:

['green', 'blue']Linguagem de código:  JSON/JSON com comentários  ( json )

Fatiamento Python: limites de início e parada

A fatia seq[start:stop]seleciona elementos começando no índice starte parando no índice stop(excluindo o elemento no índice stop).

Em outras palavras, retorna todos os elementos da sequência no índice nonde nsatisfaz a seguinte expressão:

start <= n < stop

Quando startou stopé maior que o comprimento da sequência:

len(seq)

… Python usa len(seq)para startou stop.

Ambos starte stopsão opcionais. O startpadrão é 0 e stopo padrão é len(seq)quando você não o especifica.

O exemplo a seguir retorna a lista inteira:

colors = ['red', 'green', 'blue', 'orange']
print(colors[0:100])Linguagem de código:  PHP  ( php )

Saída:

['red', 'green', 'blue', 'orange']Linguagem de código:  JSON/JSON com comentários  ( json )

Como o limite de parada é 100, o Python usa the len(colors)para o stoplimite.

O exemplo a seguir retorna uma lista vazia:

colors = ['red', 'green', 'blue', 'orange']
print(colors[10:])Linguagem de código:  PHP  ( php )

Como the starté 10, o Python atribui the len(colors)a ele.

Limites negativos de início e parada

O objeto de fatia também aceita limites starte negativos stop. O exemplo a seguir usa os limites negativos de início e término para dividir uma lista:

colors = ['red', 'green', 'blue', 'orange']

print(colors[-4:-2])
Linguagem de código:  PHP  ( php )

Saída:

['red', 'green']Linguagem de código:  JSON/JSON com comentários  ( json )

Para obter os elementos 'blue'e 'orange'da colorslista, você pode combinar os limites negativos e positivos:

colors = ['red', 'green', 'blue', 'orange']
print(colors[-2:4])Linguagem de código:  PHP  ( php )

Saída:

['blue', 'orange']Linguagem de código:  JSON/JSON com comentários  ( json )

O valor do passo

As fatias suportam o terceiro argumento, que é o valor da etapa. O valor da etapa será padronizado como 1 se você não especificá-lo:

seq[star:stop:step]Linguagem de código:  CSS  ( css )

É equivalente a:

s = slice(start, stop, step) 
seq[s]

Veja o exemplo a seguir:

colors = ['red', 'green', 'blue', 'orange']
print(colors[0:4:2])Linguagem de código:  PHP  ( php )

Saída:

['red', 'blue']Linguagem de código:  JSON/JSON com comentários  ( json )

O método dos índices

Um objeto de fatia define essencialmente uma sequência de índices para selecionar elementos de uma sequência.

Para torná-lo mais conveniente, o slicetipo possui o indicesmétodo que retorna o intervalo equivalente (start, stop, step)para qualquer fatia de uma sequência com um comprimento especificado:

slice(start, stop, step).indices(length)Linguagem de código:  CSS  ( css )

Ele retorna uma nova tupla:

(i, j, k)

E você pode usar os valores desta tupla para gerar uma lista de índices usando a rangefunção. Por exemplo:

colors = ['red', 'green', 'blue', 'orange']

s = slice(0, 4, 2)
t = s.indices(len(colors))

for index in range(*t):
    print(colors[index])Linguagem de código:  PHP  ( php )

Saída:

red
blue

Como funciona.

  • Primeiro, crie um objeto de fatia cujo início seja 0, final seja 4 e passo seja 2.
  • Segundo, retorne uma tupla de índices da fatia da sequência cujo comprimento é o comprimento da lista de cores.
  • Terceiro, passe a tupla resultante para a função range para selecionar elementos da lista de cores.

Resumo

  • O fatiamento funciona apenas para tipos de sequência, incluindo sequências mutáveis ​​e imutáveis.
  • Uma fatia é um objeto do slicetipo.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *