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 assignment
Linguagem de código: JavaScript ( javascript )
O fatiamento seq[start:stop]
retorna os elementos começando no índice start
até o índice stop - 1
. Portanto, é mais fácil visualizar que os índices estão entre os elementos quando você fatia a sequência:
Tipo de fatia Python
Tudo em Python é um objeto, incluindo a fatia. Uma fatia é na verdade um objeto do slice
tipo. Quando você usa a notação de fatiamento:
seq[start:stop]
Linguagem de código: CSS ( css )
O start:stop
é um slice
objeto.
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 3
Linguagem 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 start
e parando no índice stop
(excluindo o elemento no índice stop
).
Em outras palavras, retorna todos os elementos da sequência no índice n
onde n
satisfaz a seguinte expressão:
start <= n < stop
Quando start
ou stop
é maior que o comprimento da sequência:
len(seq)
… Python usa len(seq)
para start
ou stop
.
Ambos start
e stop
são opcionais. O start
padrão é 0 e stop
o 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 stop
limite.
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 start
e 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 colors
lista, 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 slice
tipo possui o indices
mé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 range
funçã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
slice
tipo.