Tổng và trung bình Pokémon không dùng vòng lặp
Một danh sách gồm 720 Pokémon đã được nạp vào phiên làm việc của bạn với tên names. Thống kê tương ứng của từng Pokémon đã được nạp dưới dạng một mảng NumPy tên stats. Mỗi hàng của stats ứng với một Pokémon trong names và mỗi cột biểu diễn một chỉ số riêng lẻ của Pokémon (lần lượt là HP, Attack, Defense, Special Attack, Special Defense, và Speed).
Bạn muốn lấy tổng chỉ số của mỗi Pokémon (tức là tổng của từng hàng trong stats) và giá trị trung bình chỉ số của mỗi Pokémon (tức là trung bình của từng hàng trong stats) để tìm ra Pokémon mạnh nhất.
Vòng lặp for dưới đây được viết để thu thập các giá trị này:
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))
Bài tập này là một phần của khóa học
Viết mã Python hiệu quả
Hướng dẫn bài tập
- Thay thế vòng lặp for ở trên bằng NumPy:
- Tạo một mảng tổng chỉ số (
total_stats_np) bằng phương thức.sum()và chỉ định đúng axis. - Tạo một mảng trung bình chỉ số (
avg_stats_np) bằng phương thức.mean()và chỉ định đúng axis. - Tạo danh sách đầu ra cuối cùng (
poke_list_np) bằng cách kết hợp danh sáchnames, mảngtotal_stats_np, và mảngavg_stats_np.
- Tạo một mảng tổng chỉ số (
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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))