-1
votes

Changer l'instruction Elif sur le code "Python"

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 sont des gammes, je ne pense pas que ce soit possible. xxx

sortie

[1960, 648065, 1294170, 1940275, 2586380, 3232486]


7 commentaires

"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 (...) est une chèque O (1), et elif s'assure que seul le nombre minimal de chèques sera effectué.


Et, fwiw, gamme objets sont hachable, de sorte qu'ils peuvent utiliser peuvent être utilisés comme touches de dictionnaire


Je 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 sous forme de touche, mais la recherche de dict est toujours basée sur égalité , pas de confinement, vous devez donc toujours itérer les clés pour vérifier si POP est dans chaque plage.


C'est un exemple où un intervalle d'intervalle 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 .


3 Réponses :


1
votes
f6ff00

0 commentaires

1
votes

Vous pouvez utiliser numpy.digitize XXX

Vous devrez également traiter des valeurs pop en dehors de la gamme couverte. ..


0 commentaires

2
votes

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


0 commentaires