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.

Os itens na lista derivada estão relacionados aos itens da lista de origem pelos

seus índices. Para iterar ambas as listas em paralelo, pode-se usar tamanho da

lista de origem names como limite máximo de iteração.

longest_name = None

max_letters = 0

for i in range(len(names)):

count = letters[i]

if count > max_letters:

longest_name = names[i]

max_letters = count

print(longest_name)\

>>>

Cecilia

O problema dessa implementação é que o laço inteiro é visualmente poluído. Os

índices em names e letters deixam o código difícil de ler. Os arrays são

indexados pelo índice i do laço em dois pontos diferentes. Se usarmos enumerate

(consulte o Item 10: “Prefira enumerate em vez de range”) a situação melhora

um pouco, mas ainda assim não é a ideal.

for i, name in enumerate(names):

count = letters[i]

if count > max_letters:

longest_name = name

max_letters = count

Para que o código fique realmente claro, o Python oferece a função nativa zip.

No Python 3, zip envolve dois ou mais iteradores com um gerador simplificado.

O gerador zip produz tuplas contendo o próximo valor para cada iterador. O

código resultante é muito mais claro que indexar múltiplas listas.

for name, count in zip(names, letters):

if count > max_letters:

longest_name = name

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!