如何高效检查元素是否在引用列表的范围内并获取索引引用列表?

这个想法是检查列表中的每个元素(即,data_list)是否在引用列表(即,range_list)的范围内。如果它在引用列表中,则提取range_list它出现在引用列表 ( ) 的哪个索引处。

起草了以下代码。

    lst=range(0,1000,1)
    n=6
    range_list=[lst [i:i + n] for i in range ( 0, len ( lst ), n )]

    data_list=[1,2,5,6,8,10,12,100, 102, 104, 105]
    idx_un=[]
    for x in data_list:
        for idx,y in enumerate(range_list):
            if min(y)<= x <= max ( y ):
                idx_un.append(idx)
                break

输出:

[0, 0, 0, 1, 1, 1, 2, 16, 17, 17, 17]

但我很好奇是否存在更紧凑和有效的方法。

回答

由于您的范围基本上是整数的分区,因此您实际上并不需要范围列表。您可以只使用范围的起始编号列表。一旦你这样做,你可以可以使用该bisect模块获得极快的二进制搜索业务-速度更快更简单的(假设它符合你的使用情况)。这会给你留下类似的东西:

import bisect

range_list = list(range(n,1000, n))
data_list=[1,2,5,6,8,10,12,100, 102, 104, 105]

[bisect.bisect_right(range_list, n) for n in data_list]
# [0, 0, 0, 1, 1, 1, 2, 16, 17, 17, 17]


以上是如何高效检查元素是否在引用列表的范围内并获取索引引用列表?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>