J'ai la compréhension que Python est tout sur l'efficacité. Comment j'écrirais le code ci-dessous pour être plus pythonique?
J'ai pensé à utiliser un dictionnaire, mais depuis que les conditions de l'instruction elif code> sont des gammes, je ne pense pas que ce soit possible. p> [1960, 648065, 1294170, 1940275, 2586380, 3232486] Code> p> p>
3 Réponses :
f6ff00
Vous pouvez utiliser numpy.digitize Vous devrez également traiter des valeurs pop en dehors de la gamme couverte. .. p> p>
Un L'arborescence d'intervalle est conçu pour ces types de requêtes. Un exemple est le intervaltree code> module.
from intervaltree import IntervalTree, Interval threshold_scale = [1960, 648065, 1294170, 1940275, 2586380, 3232486] ranges = zip(threshold_scale, threshold_scale[1:]) colors = ["#ff0000", "#f6ff00", "$00ff08", "$0d00ff", "$ff00f7"] t = IntervalTree([Interval(x, y, c) for (x,y), c in zip(ranges, colors)]) pop = 2000 color = sorted(t[2000])[0].data
"Python est tout au sujet de l'efficacité" ?? Depuis quand? Quel est le problème avec le code que vous avez posté?
Efficacité-sage Il n'y a rien de mal avec ce code.
dans la plage (...) code> est une chèque O (1), etelif code> s'assure que seul le nombre minimal de chèques sera effectué.Et, fwiw,
gamme code> objets sont b> hachable, de sorte qu'ils peuvent utiliser b> peuvent être utilisés comme touches de dictionnaireJe pense que le dictionnaire n'est pas un mauvais choix ici.
Je ne savais pas que la plage peut être utilisée dans des dictionnaires, car tous les exemples de dictionnaires que je trouve utilisent des objets de chaîne. Merci de me l'avoir dit.
Vous pouvez utiliser une plage code> sous forme de touche, mais la recherche de dict est toujours basée sur égalité i>, pas de confinement, vous devez donc toujours itérer les clés pour vérifier si
POP code> est dans chaque plage.C'est un exemple où un intervalle d'intervalle i> aurait le plus de sens (bien qu'il n'y ait aucune structure de données d'arborescence d'intervalle dans la bibliothèque standard Python). Voir, par exemple, pypi.org/project/intervaltree .