Ce qui est plus rapide à utiliser l'instruction if ou le type de dictionnaire lors de la conversion d'une chaîne (a-> b) en Python

Ce que j'ai fait avec le fond

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.

Conclusion

** 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 fig2.png

Si la clé contient 10 caractères fig1.png (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 ...)

environnement

Python 3 Google Colaboratory

Conditions de vérification

-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.

Exemple de code de vérification

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]")

Explication du code de vérification

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

référence

[Python] Mesurer et afficher le temps nécessaire au traitement Générer des chaînes aléatoires en utilisant Python

Recommended Posts

Ce qui est plus rapide à utiliser l'instruction if ou le type de dictionnaire lors de la conversion d'une chaîne (a-> b) en Python
Spécification du fuseau horaire lors de la conversion d'une chaîne de caractères en type datetime avec python
Vérifiez si la chaîne est un nombre en python
Hash en Perl est un dictionnaire en Python
Qu'est-ce qui est le plus rapide, le mélange Python ou l'échantillon?
python> vérifier NoneType ou non> si a == None:> si a vaut None:
Comment vérifier s'il est dans le type de dictionnaire (Dictionary, Hash) en utilisant tout ou partie
Créer un dictionnaire en Python
Pourquoi l'instruction main () -if de Python est-elle attachée?
Lorsqu'une chaîne de caractères d'une certaine série se trouve dans la clé du dictionnaire, la chaîne de caractères est convertie en valeur du dictionnaire.
Dans le dictionnaire python, si une clé inexistante est accédée, initialisez-la avec une valeur arbitraire
Comment transformer une chaîne en tableau ou un tableau en chaîne en Python
Si un débutant apprend R ou Python en décembre 2019, lequel?
[Introduction à Python] Comment générer une chaîne de caractères dans une instruction Print
Supprimer un caractère spécifique en Python s'il s'agit du dernier
Déterminer si la sortie standard est acheminée lors de l'exécution d'un script Python
[Golang] Vérifiez si une chaîne de caractères spécifique est incluse dans la chaîne de caractères
Que faire lorsque le type de valeur est ambigu en Python?
[Python] Qu'est-ce qu'une instruction with?
Quel est le meilleur, PyPy ou Python?
[Python] renvoie A [ou / et] B
Créer une chaîne aléatoire en Python
Lors de l'écriture d'un programme en Python
Comment saisir une chaîne de caractères en Python et la sortir telle quelle ou dans la direction opposée.
Que faire s'il y a un décimal dans python json .dumps
Comment écrire une chaîne de caractères lorsqu'il y a plusieurs lignes en python
Lors de l'émission d'une instruction INSERT en Python, aucune colonne de ce type n'est affichée
Que se passe-t-il si vous "importez A, B comme C" en Python?
Résoudre ABC175 A, B, C avec Python
Précautions lors du décapage d'une fonction en python
Python / dictionary> setdefault ()> Ajouter si pas dans le dictionnaire
[python] [meta] Le type de python est-il un type?
Résoudre ABC165 A, B, D avec Python
Générer une classe à partir d'une chaîne en Python
La synchronisation de la sortie est incorrecte lorsque la sortie standard (erreur) est convertie en fichier en Python
[Pour les débutants] Comportement inattendu si "\" est inclus lors de la définition du chemin en Python
Quel est le meilleur, PyPy ou Python?
Analyse par raisonnement bayésien (2) ... Test d'algorithme de découverte de mise en conserve
[Linux] Fin du processus ou du travail, quel est le meilleur?
Quel est le meilleur, l'entrée standard de python recevant input () ou sys.stdin?
Ce qui est plus rapide à utiliser l'instruction if ou le type de dictionnaire lors de la conversion d'une chaîne (a-> b) en Python
[Les débutants sont inquiets] Quel est le meilleur, Ruby, PHP ou Python?
[Python] renvoie A [ou / et] B
L'espace est-il remplacé par un signe plus ou% 20 dans le traitement du codage en pourcentage?
L'analyse de réseau est une structure de lien Web ①
L'analyse de réseau est une structure de lien Web ②
Qu'est-ce qui est le plus rapide, le mélange Python ou l'échantillon?
Comment incorporer des variables dans des chaînes python
argument de conversion $ 1 type: type non pris en charge [] chaîne, une tranche de chaîne
Obtenez plusieurs clés maximales dans le type de dictionnaire Python
Remarque Python: lors de l'attribution d'une valeur à une chaîne
python memo- "sinon A et B" était "si (pas A) et B"
Créer un objet datetime à partir d'une chaîne en Python (Python 3.3)
Sortie d'une courte chaîne de caractères de type URL en Python
Insérer un objet dans une chaîne en Python
J'ai vérifié la vitesse de référence lors de l'utilisation de la liste python, du dictionnaire et du type de jeu.
Une note lors de la vérification si la clé spécifiée existe dans le dictionnaire défini avec python
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
[Python] Précautions quand cela ne fonctionne pas même si TimedRotatingFileHandler est défini dans basicConfig en python2