我有不同的高度(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 函数的文档,但不明白为什么会出现这种情况。有人可以帮忙吗?
附言。我相信这可能是因为层列表是按降序排列的,对于我的代码的其他部分来说,这种情况很重要,所以理想情况下,任何解决方案都会保持列表不变。