15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

• Especificar simultaneamente start, end e stride em um slice pode ser

extremamente confuso.

• Prefira usar valores positivos para o stride em fatias sem índices start ou end.

Evite valores negativos de stride sempre que possível.

• Evite usar start, end e stride simultaneamente em uma mesma fatia. Se for

realmente necessário usar todos os três parâmetros, prefira usar uma variável

intermediária e fazer duas atribuições (uma para fatiar, outra para o stride)

ou então use o método islice disponível no módulo nativo itertools.

Item 7: Use abrangências de lista em vez de map e

filter

O Python oferece uma sintaxe compacta para derivar uma lista de outra. Essas

expressões são chamadas de abrangências de lista ou list comprehensions ou,

simplesmente, listcomps 4 . Por exemplo, digamos que se queira computar o

quadrado de cada número em uma lista. Isso pode ser feito criando um laço

(loop) na sequência de origem precedido pela expressão de cálculo.|

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

squares = [x**2 for x in a]

print(squares)

>>>

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

A não ser que a função sendo aplicada tenha apenas um argumento, para os casos

mais simples as abrangências de listas são mais fáceis de ler que a função nativa

map. O map precisa de uma função lambda para computar o resultado, e esta é

visualmente confusa.

squares = map(lambda x: x ** 2, a)

Ao contrário do map, as abrangências de listas permitem filtrar itens com

facilidade a partir da lista de entrada, removendo os resultados correspondentes

na saída. Por exemplo, considere que precisamos calcular apenas os quadrados

dos números divisíveis por 2. Nas abrangências de lista, basta adicionar uma

expressão condicional (um simples if) depois do laço:

even_squares = [x**2 for x in a if x % 2 == 0]

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!