Python字典:如何将键映射到值,其中键是一个范围?
问题描述:
我有值的列表:Python字典:如何将键映射到值,其中键是一个范围?
[0,1.51,2.01,2.51,3.01,5.01,6.01,7.01,8.01,9.01,10.01]
和值的第二列表:
[.15,.22,.3,.37,.4,.5,.6,.7,.8,.9,1]
我的程序的粗略逻辑是,如果某些变量落在第一个列表中的两个值之间,然后将另一个变量的值设置为第二个列表中的相应项目,即
if 0 < x < 1.51:
y = 0.15
elif 1.51 < x < 2.01:
y = .22
and so on
很明显,我可以扩展if/elif/else流程来覆盖每个案例,但是(i)这并不漂亮,(ii)它不可持续(iii)我希望能够将它应用于任何两个列表,而不是要知道其中包含的任何值。
什么是在Python中达到这一目的的最佳方式?
非常感谢
答
m=[0,1.51, 2.01, 2.51, 3.01,5.01, 6.01,7.01, 8.01,9.01, 10.01]
n=[.15, .22, .3, .37, .4, .5, .6, .7, .8, .9, 1]
def test(x,a,b):
for i in range(len(a)-1):
if a[i] < x <a[i+1]:return b[i]
>>>>test(3,m,n)
>>>> 0.37
>>>>test(.32,n,m)
>>>> 2.01
答
看一看平分线模块 - http://docs.python.org/2/library/bisect.html
而对于percentage->牌号有例子:
>>> def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
i = bisect(breakpoints, score)
return grades[i]
>>> [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]]
['F', 'A', 'C', 'C', 'B', 'A', 'A']
需要轻微的调整 - 但要改变在开始之前检查'> 0'并从边界删除'0',它应该很好地工作。 –
谢谢你将检查该模块 – Pyderman