Para entender a atribuição de fatia do Python, você deve pelo menos ter uma compreensão decente de como funciona a fatia.



link : https://www.usandopy.com/2021/12/compreendendo-notacao-de-fatia-de.html



Aqui está uma rápida recapitulação:



[ iniciar_em : parar_antes : etapa ]


Onde iniciar_em é o índice do primeiro item a ser retornado (incluído), parar_antes é o índice do elemento antes do qual parar (não incluído) e etapa é a distância entre dois itens quaisquer.


A atribuição de fatias tem a mesma sintaxe que dividir uma lista, com a única exceção de que é usada no lado esquerdo de uma expressão em vez de no lado direito.

Como o fatiamento retorna uma lista, a atribuição de fatias requer uma lista (ou outro iterável). E, como o nome indica, o lado direito deve ser o valor a ser atribuído à fatia do lado esquerdo da expressão. Por exemplo:


 

 numeros = [1, 2, 3, 4, 5]

 

 # replace elements 0 through 1

 numeros[:1] = [6]        # [6, 2, 3, 4, 5]  

 

 # replace elements 1 through 3

 numeros[1:3] = [7, 8]    # [6, 7, 8, 4, 5]  

 

 # replace the last 2 elements

 numeros[-2:] = [9, 0]    # [6, 7, 8, 9, 0]  

 


Mudança de comprimento


A parte da lista retornada pela fatia no lado esquerdo da expressão é a parte da lista que será alterada pela atribuição da fatia. Isso significa que você pode usar a atribuição de fatias para substituir parte da lista por uma lista diferente, cujo comprimento também é diferente da fatia retornada. Por exemplo:


 

numeros = [1, 2, 3, 4, 5]

 

# substitua 3 elementos por 2

numeros [1: 4] = [6, 7] # [1, 6, 7, 5]

 

# substitui 1 elemento por 3

numeros [-1:] = [8, 9, 0] # [1, 6, 7, 8, 9, 0]

 

# substitui 1 elemento por 0

numeros [: 1] = [] # [6, 7, 8, 9, 0]

 


Se você levar em consideração fatias vazias, também poderá inserir elementos em uma lista sem substituir nada nela. Por exemplo:


 

numeros = [1, 2, 3, 4, 5]

 

# insira 2 elementos

numeros [2: 2] = [6, 7] # [1, 2, 6, 7, 3, 4, 5]

 

# anexar 2 elementos

numeros [7:] = [8, 9] # [1, 2, 6, 7, 3, 4, 5, 8, 9]

 

# prefixo 1 elemento

numeros [: 0] = [0] # [0, 1, 2, 6, 7, 3, 4, 5, 8, 9]

 

# substitui a lista inteira por uma nova

numeros [:] = [4, 2] # [4, 2]

 


Usando etapas

Por último, mas não menos importante, etapa também é aplicável na atribuição de fatias e você pode usá-lo para substituir elementos que correspondem à iteração após cada passo. A única diferença é que se o passo não for 1, a lista inserida deve ter exatamente o mesmo comprimento que a fatia da lista retornada. Por exemplo:


 

numeros = [1, 2, 3, 4, 5]

 

# substitua cada segundo elemento, 2 a 5

numeros [2: 5: 2] = [6, 7] # [1, 2, 6, 4, 7]

 

# não pode substituir 2 elementos por 3

numeros [2: 5: 2] = [6, 7, 8] # Lança um ValueError

 

# substituição reversa, 1 até início

numeros [1 :: - 1] = [9, 0] # [0, 9, 6, 4, 7]