Как использовать Bisect для классификации значения? - PullRequest
0 голосов
/ 04 марта 2020

У меня есть разные высоты (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. Я полагаю, что это может быть потому, что список слоев находится в порядке убывания, это важно для других частей моего кода, поэтому в идеале любые решения будут поддерживать список как есть.

...