Суммарные и средние показатели покемонов без цикла
В вашей сессии загружен список из 720 покемонов под названием names. Статистика каждого покемона загружена в виде массива NumPy под названием stats. Каждая строка stats соответствует покемону из names, а каждый столбец представляет отдельный параметр покемона (HP, Attack, Defense, Special Attack, Special Defense и Speed соответственно).
Вы хотите получить суммарное значение характеристик каждого покемона (то есть сумму каждой строки в stats) и среднее значение его характеристик (то есть среднее арифметическое каждой строки в stats), чтобы найти самого сильного покемона.
Для сбора этих значений был написан следующий цикл for:
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))
Это упражнение является частью курса
Эффективный код на Python
Инструкции к упражнению
- Замените приведённый выше цикл
forс помощью NumPy:- Создайте массив суммарных характеристик (
total_stats_np), используя метод.sum()и указав правильную ось. - Создайте массив средних характеристик (
avg_stats_np), используя метод.mean()и указав правильную ось. - Создайте итоговый список (
poke_list_np), объединив списокnames, массивtotal_stats_npи массивavg_stats_np.
- Создайте массив суммарных характеристик (
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# 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))