Je voulais utiliser les fonctions Cloud de GCP pour convertir chaque entrée en une paire de mots, tels que «fruit» pour «pomme» et «légume» pour «fraise». Je me demandais ce qui est le plus rapide, ** convertir avec l'instruction if ** ou ** préparer une table de correspondance de type dictionnaire et convertir **, alors je l'ai essayé. Note) Dans mon cas, il s'agit souvent d'un démarrage à froid, donc je calcule le temps requis en incluant la génération de type dictionnaire.
** Si une lecture de type dictionnaire se produit à chaque fois (par exemple au démarrage à froid de Lambda sur AWS ou Cloud Functions sur GCP) ** L'instruction if est plus rapide.
Si la clé contient 5 caractères
Si la clé contient 10 caractères (Parce que j'ai utilisé Colab, la vitesse de traitement de chaque fois peut ne pas être stable)
** Ce fut une victoire écrasante pour la déclaration if. ** **
Si ce n'est pas un démarrage à froid, j'ai l'impression que le type de dictionnaire est plus rapide, donc je vais l'essayer si j'en ai envie (Si le document est ennuyeux ...)
Python 3 Google Colaboratory
-Exécuter le code pour comparer ** dans la même cellule 100 fois en modifiant le nombre de clés, et comparer par le temps moyen requis ・ Il existe 6 modèles de 5, 10, 25, 50, 100 et 200 touches.
Préparation
import time
import random, string
from statistics import mean
#Création de chaîne aléatoire (empruntée à la référence "Générer une chaîne aléatoire avec Python")
def randomname(n):
return ''.join(random.choices(string.ascii_letters + string.digits, k=n))
range_ = 5
smp_dict = {}
key_list = []
for i in range(range_):
key = randomname(10)
smp_dict[key] = randomname(20)
key_list.append(key)
#si création de déclaration
for i in range(range_):
if i == 0:
print(" if key == '{}':".format(key_list[i]))
else :
print(" elif key == '{}':".format(key_list[i]))
print(" content = '{}'".format(smp_dict[key_list[i]]))
Créez un code de vérification en copiant la sortie de l'instruction if ci-dessus
rnd_key_list = smp_dict.keys()
time_list = []
for i in range(100):
start = time.time()
for key in rnd_key_list:
if key == 's9MT4kkqyg':
content = 'JpNeK8tDV1FyQfXdzTS0'
elif key == 'PKFEikSHFM':
content = 'RxhZqdfsCqLTuxBzIrdV'
elif key == '04Ex4druSy':
content = 'GmT0Jx78xPuMrOyVPuik'
elif key == 'JUJ85l8ayb':
content = 'xVtzS0HnHHEOHML87z85'
elif key == 'HnqyHAIcLm':
content = 'NRNoem9JpGUcFxvccaxD'
time_list.append(elapsed_time)
if_mean = mean(time_list)
print ("if Mean time:{}".format(if_mean) + "[sec]")
time_list = []
for i in range(100):
start = time.time()
Smp_dict = {'s9MT4kkqyg': 'JpNeK8tDV1FyQfXdzTS0', 'PKFEikSHFM': 'RxhZqdfsCqLTuxBzIrdV', '04Ex4druSy': 'GmT0Jx78xPuMrOyVPuik', 'JUJ85l8ayb': 'xVtzS0HnHHEOHML87z85', 'HnqyHAIcLm': 'NRNoem9JpGUcFxvccaxD'}
for key in rnd_key_list:
content = Smp_dict[key]
elapsed_time = time.time() - start
time_list.append(elapsed_time)
dict_mean = mean(time_list)
print ("dict Mean time:{}".format(dict_mean) + "[sec]")
smp_dict = {}
key_list = []
for i in range(100):
key = randomname(10)
smp_dict[key] = randomname(20)
key_list.append(key)
-> Créez un type de dictionnaire et une liste de clés avec 10 caractères aléatoires comme clés et 20 caractères aléatoires comme valeurs
rnd_key_list = smp_dict.keys()
-> ~~ L'ordre n'est pas conservé lors de la création d'un type de dictionnaire ~~, créez donc une nouvelle liste de clés pour que les conditions soient les mêmes J'ai reçu un commentaire de @shiracamus que je vais le garder récemment!
start = time.time()
Smp_dict = {'BGM85yImoJ': 'i5GozNMNXGdfrlVgmVA0', ...}
-> Lire le type de dictionnaire après le démarrage de la mesure
[Python] Mesurer et afficher le temps nécessaire au traitement Générer des chaînes aléatoires en utilisant Python
Recommended Posts