Articles efficaces Python 2nd Edition-90 pour améliorer le programme Python est vraiment merveilleux, donc je le lis en pleurant.
Il y avait un élément sur la façon de traiter la clé manquante de dict, donc j'aimerais que vous lisiez ce livre pour plus de détails, mais je l'ai mesuré parce que je m'inquiétais du temps de traitement de chacun.
Cette fois, c'est assez facile, mais j'écrirai un processus pour compter les caractères qui apparaissent dans une certaine chaîne de caractères. L'environnement d'exécution est celui par défaut de Google Colab.
Tout d'abord, importez les bibliothèques requises.
import time, defaultdict
Ciblez une chaîne de caractères appropriée pour l'agrégation.
target = 'super_string_of_my_passages. but this does not make sense at all. because this is nothing'
Enfin, la valeur-clé triée par le nombre d'occurrences est sortie et le résultat attendu est le suivant.
[('s', 13),
(' ', 12),
('e', 8),
('t', 7),
('a', 6),
('i', 5),
('n', 5),
('_', 4),
('o', 4),
('u', 3),
('g', 3),
('h', 3),
('p', 2),
('r', 2),
('m', 2),
('.', 2),
('b', 2),
('l', 2),
('f', 1),
('y', 1),
('d', 1),
('k', 1),
('c', 1)]
L'instruction if vérifie si la clé existe et donne à la clé manquante une valeur initiale en utilisant une expression in qui renvoie True. Probablement la première façon simple de trouver.
%%time
ranking = {}
for key in target:
if key in ranking.keys():
count = ranking[key]
else:
count = 0
ranking[key] = count + 1
sorted(ranking.items(), key=lambda x: x[1], reverse=True)
CPU times: user 45 µs, sys: 9 µs, total: 54 µs Wall time: 56.3 µs
Utilisez l'instruction try-except pour gérer l'erreur KeyError qui est la cause de l'erreur comme une erreur attendue.
%%time
ranking = {}
for key in target:
try:
count = ranking[key]
except KeyError:
count = 0
ranking[key] = count + 1
sorted(ranking.items(), key=lambda x: x[1], reverse=True)
CPU times: user 59 µs, sys: 11 µs, total: 70 µs Wall time: 78.2 µs
Utilisez la méthode get fournie par le dict intégré.
%%time
ranking = {}
for key in target:
count = ranking.get(key, 0)
ranking[key] = count + 1
sorted(ranking.items(), key=lambda x: x[1], reverse=True)
CPU times: user 43 µs, sys: 8 µs, total: 51 µs Wall time: 53.6 µs
%%time
ranking = defaultdict(int)
for s in target:
ranking[s] += 1
sorted(ranking.items(), key=lambda x: x[1], reverse=True)
CPU times: user 36 µs, sys: 8 µs, total: 44 µs Wall time: 47.2 µs
Le defaultdict peut être bon! (* ^^)
C'est tout pour les méthodes couvertes dans ce livre, Hé, si vous faites ce genre de traitement, vous pouvez l'utiliser! Tu ne peux pas l'oublier? Je vais l'écrire comme une édition supplémentaire car il semble y être inséré. Dans un cas aussi simple, vous pouvez utiliser la classe Counter de la bibliothèque de collections. C'est une méthode pratique qui compte le nombre d'occurrences dans chaque élément. Puisqu'il existe une méthode la plus courante qui trie par le nombre, utilisez-la.
from collections import Counter
%%time
ranking = Counter(target)
ranking.most_common()
CPU times: user 53 µs, sys: 0 ns, total: 53 µs Wall time: 56.5 µs
Merci beaucoup!
Recommended Posts