0

我有不同的高度(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 函数的文档,但不明白为什么会出现这种情况。有人可以帮忙吗?

附言。我相信这可能是因为层列表是按降序排列的,对于我的代码的其他部分来说,这种情况很重要,所以理想情况下,任何解决方案都会保持列表不变。

4

0 回答 0