• 售前

  • 售后

热门帖子
入门百科

利用python 举行区间取值的方法

[复制链接]
123456790 显示全部楼层 发表于 2021-8-14 01:00:48 |阅读模式 打印 上一主题 下一主题
需求配景:
进行分值盘算。如下图,假如只是一两个还好说,写写判定,但是假如有几十个,几百个,会不会惨不忍睹。而且,下面的照旧三种情况。
比方:

办理:
  1. # 根据值、比较list, 值list,返回区间值, other_value 即不在的情况
  2.     def get_value_by_between(self, compare_value, compare_list, value_list, other_value, type="compare", left=False,
  3.                              right=True):
  4.         try:
  5.             if compare_value is None or compare_value == '':
  6.                 return other_value
  7.             if len(compare_list) != len(value_list):
  8.                 raise Exception("区间对比两个list长度不一致")
  9.             # # 如果比较的值和其它情况值一致,说明是其它情况
  10.             # if compare_value == other_value:
  11.             #     return other_value
  12.             # 左边开区间
  13.             if compare_list[0] == -9999999 and compare_list[1] >= compare_value:
  14.                 return value_list[0]
  15.             # 右边开区间
  16.             if right is True and compare_value > compare_list[len(compare_list) - 1]:
  17.                 return value_list[len(compare_list) - 1]
  18.             # 左边开区间
  19.             # if left is True and compare_value <= compare_list[0]:
  20.             #     return compare_value[0]
  21.             for ind, this_val in enumerate(compare_list):
  22.                 # 如果是最后一个,则返回最后一个值
  23.                 if compare_value > compare_list[len(compare_list) - 1]:
  24.                     return value_list[len(compare_list) - 1]
  25.                 # 返回默认的
  26.                 elif (ind + 1) == len(compare_list):
  27.                     return other_value
  28.                 # 下一个,如果大于compare_list长度减1 ,就返回最后一个
  29.                 next_val = compare_list[ind if ind >= len(compare_list) else ind + 1]
  30.                 # 第一个的话就是 大于等于,小于下一个
  31.                 if ind == 0 and compare_value >= this_val and compare_value <= next_val:
  32.                     return value_list[ind]
  33.                 # 大于左边,小于等于右边
  34.                 elif this_val < compare_value and compare_value <= next_val:
  35.                     return value_list[ind]
  36.         except:
  37.             log.error("根据区间计算分数异常", traceback.format_exc())
  38.         return other_value
复制代码
  1. # 数字型
  2.     def get_val_by_list(self, compare_value, compare_list, val_list, other_value):
  3.         try:
  4.             if compare_value is None:
  5.                 return other_value
  6.             for ind, li in enumerate(compare_list):
  7.                 if len(li) == 1 and compare_value == li[0]:
  8.                     return val_list[ind]
  9.                 # 最后一个
  10.                 elif len(li) == 1 and (ind + 1) == len(compare_list) and compare_value >= li[0]:
  11.                     return val_list[ind]
  12.                 elif len(li) == 2 and compare_value >= li[0] and compare_value <= li[1]:
  13.                     return val_list[ind]
  14.         except:
  15.             log.error(" get_val_by_list 异常", traceback.format_exc())
  16.         return other_value
复制代码
TEST
  1. # creditTime 即值
  2. self.get_val_by_list(creditTime, [[0],[1],[2],[3]], [20, 10, 0, -100],
  3.                                                                    other_value=0)
复制代码
  1. self.get_value_by_between(taxCreditRating, [0, 60, 70, 80, 90],[-200, 0, 10, 20, 30], other_value=0)
复制代码
假如是图2,即第三种情况,则需要多加一个0,和对应的值。
  1. self.get_value_by_between(taxAmt12m, [0,0, 1000, 15000, 50000, 200000],[-50, -50, 0, 0, 5, 10], -0)
复制代码
假如是负无穷大,则利用-999999
到此这篇关于利用python 进行区间取值的文章就介绍到这了,更多干系python区间取值内容请搜索脚本之家以前的文章或继承欣赏下面的干系文章盼望各人以后多多支持脚本之家!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作