さまざまなレイヤーに分類したいさまざまな高さ (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)
z の値は通常、レイヤー リストに含まれる値になるため、if ステートメントが含まれています。ただし、ラインを実行すると
layers = [20,15.75,14.75,10.5,9.5,5.25,4.25]
bisect.bisect_left(layers,20)
0 になると思っていたのに 7 になってしまいました。関数 bisect のドキュメントを読みましたが、なぜそうなるのかわかりません。誰でも助けることができますか?
Ps。レイヤーリストが降順であることが原因である可能性があると思います。コードの他の部分がそうであることが重要であるため、理想的には、どのソリューションでもリストをそのまま維持します。