Viết mã Python hiệu quả
Logan Thomas
Scientific Software Technical Trainer, Enthought
Một số vòng lặp sau có thể loại bỏ bằng kỹ thuật đã học trước đó.
Ví dụ trong bài chỉ dùng cho mục đích minh họa.

import numpy as np names = ['Absol', 'Aron', 'Jynx', 'Natu', 'Onix'] attacks = np.array([130, 70, 50, 50, 45])for pokemon,attack in zip(names, attacks):total_attack_avg = attacks.mean()if attack > total_attack_avg: print( "{}'s attack: {} > average: {}!" .format(pokemon, attack, total_attack_avg) )
Absol's attack: 130 > average: 69.0!
Aron's attack: 70 > average: 69.0!
import numpy as np names = ['Absol', 'Aron', 'Jynx', 'Natu', 'Onix'] attacks = np.array([130, 70, 50, 50, 45])# Tính trung bình tổng một lần (ngoài vòng lặp) total_attack_avg = attacks.mean()for pokemon,attack in zip(names, attacks): if attack > total_attack_avg: print( "{}'s attack: {} > average: {}!" .format(pokemon, attack, total_attack_avg) )
Absol's attack: 130 > average: 69.0!
Aron's attack: 70 > average: 69.0!
%%timeit
for pokemon,attack in zip(names, attacks):
total_attack_avg = attacks.mean()
if attack > total_attack_avg:
print(
"{}'s attack: {} > average: {}!"
.format(pokemon, attack, total_attack_avg)
)
74.9 µs ± 3.42 µs mỗi vòng lặp (trung bình ± độ lệch chuẩn của 7 lần chạy, 10000 vòng lặp mỗi lần)
%%timeit
# Tính trung bình tổng một lần (ngoài vòng lặp)
total_attack_avg = attacks.mean()
for pokemon,attack in zip(names, attacks):
if attack > total_attack_avg:
print(
"{}'s attack: {} > average: {}!"
.format(pokemon, attack, total_attack_avg)
)
37.5 µs ± 281 ns mỗi vòng lặp (trung bình ± độ lệch chuẩn của 7 lần chạy, 10000 vòng lặp mỗi lần)
names = ['Pikachu', 'Squirtle', 'Articuno', ...] legend_status = [False, False, True, ...] generations = [1, 1, 1, ...]poke_data = [] for poke_tuple in zip(names, legend_status, generations):poke_list = list(poke_tuple)poke_data.append(poke_list)print(poke_data)
[['Pikachu', False, 1], ['Squirtle', False, 1], ['Articuno', True, 1], ...]
names = ['Pikachu', 'Squirtle', 'Articuno', ...] legend_status = [False, False, True, ...] generations = [1, 1, 1, ...]poke_data_tuples = [] for poke_tuple in zip(names, legend_status, generations): poke_data_tuples.append(poke_tuple)poke_data = [*map(list, poke_data_tuples)]print(poke_data)
[['Pikachu', False, 1], ['Squirtle', False, 1], ['Articuno', True, 1], ...]
%%timeit
poke_data = []
for poke_tuple in zip(names, legend_status, generations):
poke_list = list(poke_tuple)
poke_data.append(poke_list)
261 µs ± 23.2 µs mỗi vòng lặp (trung bình ± độ lệch chuẩn của 7 lần chạy, 1000 vòng lặp mỗi lần)
%%timeit
poke_data_tuples = []
for poke_tuple in zip(names, legend_status, generations):
poke_data_tuples.append(poke_tuple)
poke_data = [*map(list, poke_data_tuples)]
224 µs ± 1.67 µs mỗi vòng lặp (trung bình ± độ lệch chuẩn của 7 lần chạy, 1000 vòng lặp mỗi lần)
Viết mã Python hiệu quả