Python在列表或数组中的范围之间查找数字

rag*_*ner 6 python arrays numpy list pandas

我有一个包含数百万个数字的列表,这些数字总是在增加到最后,我需要找到并返回指定范围内的数字,例如大于X但小于Y的数字,列表中的数字可以改变,值是我的也在寻找变化

我一直在使用这种方法,请注意这是一个基本的例子,数字不一致或与我的程序中显示的相同

l = [i for i in range(2000000)]
nums = []
for element in l:
    if element > 950004:
        break
    if element > 950000:
        nums.append(element)
#[950001, 950002, 950003, 950004]
Run Code Online (Sandbox Code Playgroud)

虽然速度很快,但我需要它对我的程序运行速度要快一些,数字会发生很大变化,所以我想知道是否有更好的方法可以用pandas系列或numpy数组做到这一点?但到目前为止,我所做的只是在numpy中做一个例子:

a = numpy.array(l,dtype=numpy.int64)
Run Code Online (Sandbox Code Playgroud)

大熊猫系列会更实用吗?利用query()?使用数组而不是python对象的python列表来处理这个问题的最佳方法是什么

Cal*_*tor 9

这是使用二进制搜索的解决方案.你说的是数百万的数字.技术上二进制搜索将通过将运行时复杂度降低到O(log n)而忽略最终切片步骤来使算法更快.

import bisect

l = [i for i in range(2000000)]
lower_bound = 950000
upper_bound = 950004

lower_bound_i = bisect.bisect_left(l, lower_bound)
upper_bound_i = bisect.bisect_right(l, upper_bound, lo=lower_bound_i)
nums = l[lower_bound_i:upper_bound_i]
Run Code Online (Sandbox Code Playgroud)

  • 通过在`bisect.bisect_right`中使用`lo = lower_bound_i`参数,可以使这更加高效. (2认同)