Je suis en train de refactoriser une fonction qui, étant donné une série de points de terminaison qui définissent implicitement des intervalles, vérifie si un nombre est inclus dans l'intervalle, puis renvoie un correspondant (non lié de manière calculable). Le code qui gère maintenant le travail est:Python: mappage d'intervalles à des valeurs
if p <= 100:
return 0
elif p > 100 and p <= 300:
return 1
elif p > 300 and p <= 500:
return 2
elif p > 500 and p <= 800:
return 3
elif p > 800 and p <= 1000:
return 4
elif p > 1000:
return 5
Ce qui est tout à fait l'OMI horrible, et manque en ce que les intervalles et les valeurs de retour sont hardcoded. Toute utilisation de toute structure de données est bien sûr possible.
+1 J'aime ça. Vous apprenez quelque chose de nouveau chaque jour. – kjfletch
+1: incroyable! –
Vraiment impressionnant. Super propre, et je crois très vite aussi. Il peut également être facilement étendu dans le cas où on a besoin d'un ordre non-naturel ou autre chose en retour, comme une chaîne: import bisect n = bisect.bisect_left ([100,300,500,800,1000], p) a = ["absent", "bas", "moyen", "haut", "très élevé", "extrême"] a [n] – Agos