pol*_*ian 2 python performance list
这个想法是检查列表中的每个元素(即,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
Run Code Online (Sandbox Code Playgroud)
输出:
[0, 0, 0, 1, 1, 1, 2, 16, 17, 17, 17]
Run Code Online (Sandbox Code Playgroud)
但我很好奇是否存在更紧凑和有效的方法。
由于您的范围基本上是整数的分区,因此您实际上并不需要范围列表。您可以只使用范围的起始编号列表。一旦你这样做,你可以可以使用该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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34 次 |
| 最近记录: |