我的任务是将数字分为四个范围内的组,从2(2,6,10,14 ......)开始。因此对于数字9,类别将是6(6到10之间)。我已经开发了以下功能,但我猜测它是一种更有效的方法,而且范围不受限制。
>>> def FindCategory (num):
categories = [2]
lastVal = 2
for i in range (100):
lastVal = lastVal + 4
categories += [lastVal]
try:
return [cat for cat in categories if cat < num and num < cat + 4] [0]
except:
return
>>> FindCategory (56)
54
>>> FindCategory (99999999999999999999999999)
>>>
答案 0 :(得分:1)
只是使用数学?
def category(n):
return (((n + 2) // 4) * 4) - 2
示例:
>>> category(2)
2
>>> category(56)
54
>>> category(99)
98
>>> category(99999999999999999999999999)
99999999999999999999999998
作为解释:没有shift-by-2,你只是寻找最接近的(较低的)4的倍数,只能通过整数除法找到然后乘以4(即{{1} }})。 (n//4)*4
和+2
说明了您的类别转变。