0

値のリストがあります:

[0,1.51、2.01、2.51、3.01、5.01、6.01、7.01、8.01、9.01、10.01]

そして、値の2番目のリスト:

[.15、.22、.3、.37、.4、.5、.6、.7、.8、.9、1]

私のプログラムの大まかな論理は、ある変数の値が最初のリストの2つの値の間にある場合、別の変数の値を2番目のリストの対応する項目に設定することです。

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)これを任意の2つのリストに適用できるようにしたいので、に含まれる値のいずれかを知っています。

Pythonでこれを達成するための最良の方法は何ですか?

どうもありがとう

4

2 に答える 2

7

bisectモジュールをご覧ください-http ://docs.python.org/2/library/bisect.html

そして、パーセンテージ->グレードの例:

>>> 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']
于 2012-11-12T12:46:54.343 に答える
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
于 2012-11-12T15:26:40.317 に答える