15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

seguintes exemplos.

a = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

a[::2] # ['a', 'c', 'e', 'g']

a[::-2] # ['h', 'f', 'd', 'b']

Aqui, ::2 significa selecionar o primeiro item, e a partir daí o “segundo depois do

próximo” (ou seja, “pula um”). O ::-2 , como se poderia imaginar, tem o mesmo

comportamento mas começa do fim em direção ao início.

Mas o que significa 2::2? E qual a diferença entre -2::-2 , -2:2:-2 e 2:2:-2?

a[2::2] # ['c', 'e', 'g']

a[-2::-2] # ['g', 'e', 'c', 'a']

a[-2:2:-2] # ['g', 'e']

a[2:2:-2] # []

O problema é que a parte do stride na sintaxe de fatiamento é um tanto confusa.

Já é difícil o bastante ler três números dentro dos colchetes por conta da

densidade, e fica menos óbvio entender os índices start e end: se é antes ou

depois de considerar o valor do stride. E se o stride for negativo, isso muda?

Para evitar esses problemas de legibilidade e entendimento, evite usar o stride

em conjunto com os índices start e end. Se for necessário usar um stride, prefira

valores positivos e omita os índices start e end. Se for absolutamente necessário

combinar stride com índices start ou end, considere fazê-lo em duas atribuições

separadas, usando uma variável a mais: uma atribuição para o stride, outra para

realmente fazer o fatiamento.

b = a[::2] # ['a', 'c', 'e', 'g']

c = b[1:-1] # ['c', 'e']

Esse procedimento tem a desvantagem de criar uma cópia adicional dos dados

(lembre-se: o fatiamento cria uma lista nova). A primeira operação deve tentar

reduzir o tamanho do slice ao máximo. Se o seu programa por alguma razão não

tiver condições de arcar com o uso adicional de memória necessário para esses

dois passos, experimente o método islice, presente no módulo nativo itertools

(consulte o Item 46: “Use algoritmos e estruturas de dados nativos”), que não

permitem valores negativos para start, end ou stride.

Lembre-se

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!