我试图判断一个数字是否在整数范围内,并根据它所在的范围返回一个数字.我想知道是否有更好、更有效的方法:

def checkRange(number):
    if number in range(0, 5499):
        return 5000
    elif number in range(5500, 9499):
        return 10000
    elif number in range(9500, 14499):
        return 15000
    elif number in range(14500, 19499):
        return 20000
    elif number in range(19500, 24499):
        return 25000
    elif number in range(24500, 29499):
        return 30000
    elif number in range(29500, 34499):
        return 35000
    elif number in range(34500, 39499):
        return 40000
    elif number in range(39500, 44499):
        return 45000

这感觉像是浪费资源,如果有更好的方法,我们将不胜感激.

推荐答案

由于有连续的、排序的范围,一种更快、更不冗长的方法是使用bisect模块在断点列表中查找索引,然后使用它从值列表中获取相应的值:

import bisect

break_points = [5499,  9499, 14499, 19499, 24499, 29499, 34499, 39499, 44499]
values       = [5000, 10000, 15000, 20000, 25000, 30000, 35000, 40000, 45000]

n = 10000
index = bisect.bisect_left(break_points, n)

values[index]
# 15000

如果可能的话,您需要测试超过最后一个断点的n个值.或者,您可以将默认值添加到"值"列表的末尾.

Python-3.x相关问答推荐

Pandas :从元组字典创建数据帧

如何在输入正确的用户名和密码时添加按钮?

将列表转换为 pandas 数据框,其中列表包含字典

TypeError: issubclass() arg 1 在 Flask 中导入 langchain 时必须是一个类

如何在类中的函数(以 self 作为第一个参数)中使用递归

使用 python 查找标记的元素

如何对具有多个列值的 pandas 数据框进行数据透视/数据透视表

如何融化具有自定义名称的Pandas

如何使用 Selenium by class_name 从大学橄榄球数据中抓取图像 url 列表

Python:获取未绑定的类方法

ImportError:没有名为资源的模块

python3源的类图查看器应用程序

python asyncio - 如何等待取消的屏蔽任务?

如何在 Selenium 和 Python 中使用类型查找元素

Python的max函数有多高效

python 3的蓝牙库

混合全局/参数和名为top的函数的奇怪python行为

python - 使用 matplotlib 和 boto 将绘图从内存上传到 s3

TypeError:只有整数标量数组可以转换为标量索引

如何为 Python 3.x 安装 psycopg2?