Quiero entender la forma más pitónica de implementar un caso de cambio de base de rango numérico.
Considere la siguiente función como un ejemplo para proporcionar sugerencias.
def bucket(input_number): if input_number <= 29: bucket = 1 elif 29 < input_number <= 59: bucket = 2 elif 59 < input_number <= 89: bucket = 3 elif 89 < input_number <= 119: bucket = 4 elif 119 < input_number <= 149: bucket = 5 elif 149 < input_number <= 179: bucket = 6 elif 179 < input_number <= 209: bucket = 7 elif 209 < input_number <= 239: bucket = 8 elif 239 < input_number <= 269: bucket = 9 elif 269 < input_number <= 299: bucket = 10 elif 299 < input_number <= 329: bucket = 11 elif 329 < input_number <= 359: bucket = 12 elif input_number > 359: bucket = 13 else: bucket = 0 return bucketTenga en cuenta:
Puedes dividir por 30 como a continuación:
def bucket(input_number): if input_number > 359: return 13 elif input_number < 0: return 0 return input_number // 30 + 1No sé si es "pitónico" o efectivo en tiempo de ejecución, pero parece una forma más agradable:
bucket_dict = {29: 2, 59: 3, 89: 4, 119: 5, ...} def bucket(input_number): answer = 1 # number to return if input_number is smaller than the lowest value for k in sorted(bucket_dict.keys()): if input_number <= k: return answer answer = bucket_dict[k] return 13 # number to return if input_number is larger than the highest value