Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用对分对值进行分类?_Python_Sorting_Bisect - Fatal编程技术网

Python 如何使用对分对值进行分类?

Python 如何使用对分对值进行分类?,python,sorting,bisect,Python,Sorting,Bisect,我有不同的高度(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["

我有不同的高度(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。我已经阅读了对分函数的文档,不明白为什么会出现这种情况。有人能帮忙吗


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

对分
模块中的所有内容都基于列表按升序排序的假设。它完全是用Python编写的,因此您可以复制它并反转所有的比较运算符,以获得您想要的效果。@jasonharper,这很有意义,谢谢。我还处于python教育的早期阶段,所以这可能有点挑战性,有没有一种方法可以使用对分输出对这些值进行分类?或者可能是完全不同的库函数?请参阅相关-可能重复。