Pokémon totals and averages without a loop
A list of 720 Pokémon has been loaded into your session called names
. Each Pokémon's corresponding statistics has been loaded as a NumPy array called stats
. Each row of stats
corresponds to a Pokémon in names
and each column represents an individual Pokémon stat (HP
, Attack
, Defense
, Special Attack
, Special Defense
, and Speed
respectively.)
You want to gather each Pokémon's total stat value (i.e., the sum of each row in stats
) and each Pokémon's average stat value (i.e., the mean of each row in stats
) so that you find the strongest Pokémon.
The below for loop was written to collect these values:
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))
This exercise is part of the course
Writing Efficient Python Code
Exercise instructions
- Replace the above for loop using NumPy:
- Create a total stats array (
total_stats_np
) using the.sum()
method and specifying the correct axis. - Create an average stats array (
avg_stats_np
) using the.mean()
method and specifying the correct axis. - Create a final output list (
poke_list_np
) by combining thenames
list, thetotal_stats_np
array, and theavg_stats_np
array.
- Create a total stats array (
Hands-on interactive exercise
Have a go at this exercise by completing this sample code.
# 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))