我有一个问题需要确定一个值在其他值之间的位置。这是一个可怕的长期问题……但这是一个令人困惑的问题(至少对我而言)。
可以使用以下数据查看问题的最简单表示形式:
我的值是24.0。我需要确定该值在六个“范围”内的位置。范围是:10、20、30、40、50、60。我需要计算值在范围内的何处着陆。我可以看到它介于20到30之间。一个简单的if语句可以为我找到它。
我的用于检查值是否在20到30之间的if语句为:
if value >=20 and value <=30:
很简单的东西。
我遇到的麻烦是当我尝试对输出进行排名时。
例如,假设每个范围值都被赋予了整数表示形式。10 = 1、20 = 2、30 = 3、40 = 4、50 = 5、60 = 6、70 = 7。另外,可以说,如果该值小于两个值之间的中点,则会为其分配较低值的等级输出。例如,我的值24在20到30之间,因此应将其排名为“ 2”。
在这个示例中,这本身非常简单,但是使用现实世界的数据,我具有如下范围和值:
另一个皱纹-范围的顺序很重要。在上面,第一个范围号等于1的等级,第二个范围号等于2的等级,以此类推,正如我在上面几段中提到的那样。
范围值中的负数引起麻烦,直到我决定使用百分位排序,才能完全消除负值。为此,我使用从Map每个列表值到其相应百分位数的答案,如下所示:
y=[stats.percentileofscore(x, a, 'rank') for a in x]
其中x是范围和我正在检查的值。通过在上面运行value = 6个值将导致y为:
x = [1, 40, 35, 30, 5, 3, 0, 6]
y=[stats.percentileofscore(x, a, 'rank') for a in x]
查看“ y”,我们将其视为:
[25.0, 100.0, 87.5, 75.0, 50.0, 37.5, 12.5, 62.5]
我现在需要做的是根据以下排名图将最后一个值(62.5)与其他值进行比较,以查看最终排名(从1到7的排名):
1=25.0
2=100.0
3=87.5
4=75.0
5=50.0
6=37.5
7=12.5
如果该值介于两个值之间,则应为其分配较低的等级。在此示例中,62.5值的最终排名值为4,因为它位于75.0(等级= 4)和50.0(等级= 5)之间。
如果我采用“ y”并将其分解并在多个if / else语句中使用这些值,则它适用于部分但不是全部(-13示例无法正常工作)。
我的问题是这样的:
如何在不构建巨大的if / elif结构的情况下,以编程方式分析任何值/范围集以找到最终排名?以下是一些样本集。排名按以下显示顺序排列(范围= 1中的第一个值,秒= 2,依此类推)
我可能会在python中缺少一些很容易做到的事情...但是我将头撞在墙上已经好几天了,没有任何进展。
任何帮助/指针,不胜感激。
以第一个例子为例-13
。
y = [5, 35, 30, 25, -25, -30, -35]
value_to_check = -13
max_rank = len(y) # Default value in case no range found (as per 2.26 value example)
for ii in xrange(len(y)-1,0,-1):
if (y[ii] <= value_to_check <= y[ii-1]) or (y[ii] >= value_to_check >= y[ii-1]):
max_rank = ii
break
>>> max_rank
4
以函数形式:
def get_rank(y, value_to_check):
max_rank = len(y) # Default value in case no range found (as per 2.26 value example)
for ii in xrange(len(y)-1,0,-1):
if (y[ii] <= value_to_check <= y[ii-1]) or (y[ii] >= value_to_check >= y[ii-1]):
max_rank = ii
break
return max_rank
您打电话的时候:
>>> get_rank(y, value_to_check)
4
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句