У меня есть разные высоты (z), которые я хочу разделить на разные слои. Если смотреть онлайн, то похоже, что функция bisect_left - это хороший способ найти, где в списке должно появиться значение. Я определил имя каждого слоя в качестве позиции заданного значения z в списке. Например, z = 15.75 соответствует слою 1. Я написал нижеприведенную функцию для реализации этого.
def layer_update(particle):
layers = [20,15.75,14.75,10.5,9.5,5.25,4.25]
z = particle["z"]
if z in layers:
particle["layer"] = bisect.bisect_left(layers,z)
else:
particle["layer"] = bisect.bisect_left(layers,z) - 1
return(particle)
Оператор if включен, потому что мои значения z, как правило, будут значениями, включенными в слои список. Однако, когда я запускаю строку
layers = [20,15.75,14.75,10.5,9.5,5.25,4.25]
bisect.bisect_left(layers,20)
, я ожидаю получить 0, но я получаю 7. Я прочитал документацию по функции bisect и не могу понять, почему это может иметь место. Кто-нибудь может помочь?
Ps. Я полагаю, что это может быть потому, что список слоев находится в порядке убывания, это важно для других частей моего кода, поэтому в идеале любые решения будут поддерживать список как есть.