gpt4 book ai didi

python - 如何有效地检查python中的连续范围

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:18 25 4
gpt4 key购买 nike

根据范围分配等级:

def getGrade(size):
grade =''
if size <= 32:
grade = 'p4'
elif size > 32 and size <=64:
grade = 'p6'
elif size > 64 and size <= 128:
grade = 'p10'
elif size > 128 and size <= 256:
grade = 'p15'
elif size > 256 and size <=512:
grade = 'p20'
elif size > 512 and size <= 1024:
grade = 'p30'
elif size > 1024 and size <= 2048:
grade = 'p40'
......

问题是需要再添加 20 个 检查,所以有没有比这种方法做得更好的方法。

最佳答案

由于范围是连续的,您可以避免重复下限。

将所有范围放在元组中可以节省一些输入(如果第一个范围没有下降到负无穷大,请考虑在所有其他元组之前添加元组 (0, None):

def getGrade(size):
grades = (
(32, 'p4'),
(64, 'p6'),
(128, 'p10'),
...
)

for maxVal, grade in grades:
if size <= maxVal:
return grade

测试:

>>> getGrade(45)
'p6'
>>> getGrade(100)
'p10'

效率:

如果 grades 列表真的很长,您可以获得比扫描每个项目更好的运行时间。由于列表已排序,您可以使用 bisect ,通过替换 for 循环:

    for maxVal, grade in grades:
if size <= maxVal:
return grade

与:

    index = bisect.bisect(grades, (size, ))
if index < len(grades):
return grades[index][1]

步数从 N(grades 的长度)减少(在最坏的情况下)到 log2(N)。

关于python - 如何有效地检查python中的连续范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50114208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com