Totais e médias de Pokémon sem um loop
Uma lista de 720 Pokémon foi carregada em sua sessão chamada names
. As estatísticas correspondentes de cada Pokémon foram carregadas como uma matriz NumPy chamada stats
. Cada linha de stats
corresponde a um Pokémon em names
e cada coluna representa uma estatística individual do Pokémon (HP
, Attack
, Defense
, Special Attack
, Special Defense
e Speed
respectivamente).
Você deseja reunir o valor total de estatísticas de cada Pokémon (ou seja, a soma de cada linha em stats
) e o valor médio de estatísticas de cada Pokémon (ou seja, a média de cada linha em stats
) para que você encontre o Pokémon mais forte.
O loop for abaixo foi escrito para coletar esses valores:
poke_list = []
for pokemon,row in zip(names, stats):
total_stats = np.sum(row)
avg_stats = np.mean(row)
poke_list.append((pokemon, total_stats, avg_stats))
Este exercício faz parte do curso
Como escrever um código Python eficiente
Instruções de exercício
Substitua o loop for acima usando o NumPy:
Crie uma matriz de estatísticas totais (
total_stats_np
) usando o método.sum()
e especificando o eixo correto.Crie uma matriz de estatísticas médias (
avg_stats_np
) usando o método.mean()
e especificando o eixo correto.Crie uma lista de saída final (
poke_list_np
) combinando a listanames
, a matriztotal_stats_np
e a matrizavg_stats_np
.
Exercício interativo prático
Experimente este exercício preenchendo este código de exemplo.
# Create a total stats array
total_stats_np = ____.____(axis=____)
# Create an average stats array
avg_stats_np = ____
# Combine names, total_stats_np, and avg_stats_np into a list
poke_list_np = [*____(names, total_stats_np, avg_stats_np)]
print(poke_list_np == poke_list, '\n')
print(poke_list_np[:3])
print(poke_list[:3], '\n')
top_3 = sorted(poke_list_np, key=lambda x: x[1], reverse=True)[:3]
print('3 strongest Pokémon:\n{}'.format(top_3))