如何将数字映射到范围

时间:2014-05-07 14:11:22

标签: python python-2.7 python-3.x

我想将给定值映射到一系列值。例如,我试图按照班级学生获得的百分比来做这件事。而不是存储个人百分比,我想存储5的范围。例如。对于72%,范围将是70 to 75。我怎么能这样做。

我想使用字典来做这件事,但无法弄清楚如何做。想做类似的事情:

mydict = {range(0,5):"0 to 5", range(5,10):"5 to 10" ... }

有没有办法做到这一点?

编辑:我想用字典

来做这件事

3 个答案:

答案 0 :(得分:4)

您不需要制作字典。

>>> n = 72
>>> base = n // 5 * 5
>>> '{} to {}'.format(base, base+5)
'70 to 75'

答案 1 :(得分:0)

如果你想要字典,你可以这样做:

{k:"{} to {}".format(k - (k%5),5+k - (k%5)) for k in range(MAX_VAL)}

这样,每个数字都会指向所需的字符串。

但是,我相信@fattru的答案更能满足您的需求

答案 2 :(得分:0)

如果您有一个数字列表(例如学生的分数列表),您可以使用numpy.digitize将值映射到预定义大小的垃圾箱索引。

http://docs.scipy.org/doc/numpy/reference/generated/numpy.digitize.html

例如:

>>>scores = [72, 45, 28, 10, 92]
>>>bins = [0, 40, 55, 60, 70, 80, 90, 100]
>>>numpy.digitize(scores, bins)
array([5, 2, 1, 1, 7])

如果您希望将bin索引输出到字符串的范围,您可以创建一个简单的函数:

def range_str(index, bins):
    return '{} to {}'.format(bins[index-1], bins[index])

e.g。

>>>range_str(5, bins)
'70 to 80'