2012-11-12 87 views
0

我有值的列表: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中達到這一目的的最佳方式?

非常感謝

回答

0
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 
7

看一看平分線模塊 - 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'並從邊界刪除'0',它應該很好地工作。 –

+0

謝謝你將檢查該模塊 – Pyderman

相關問題