我有一种简单的方法将数字分类到不同的范围吗?

时间:2019-07-09 02:50:27

标签: python-3.x

有一个列表:

ranges = [(0,11), (11, 20), (20, 35), (35, 40), (40, 50), (50, 62), (62, 
75), (75, 83), (83, 90), (90, 100)]

例如,(7,8)表示7 <= x <8。 现在有一个数字n,我想将其分类为不同的范围。

我在想:

ranges = [(0,11), (11, 20), (20, 35), (35, 40), (40, 50), (50, 62), (62, 
75), (75, 83), (83, 90), (90, 100)]
n = 22
for pair in ranges:
   if pair[0] <= n < pair[1]:
   print(f'{n} in the range:{pair}')

其时间复杂度为O(n) 但是,如果存在要分类的数字列表,则时间复杂度变为O(m * n)。在这种情况下,是否有一种简单的方法可以使时间复杂度O(m)?

任何答案都是值得的。

2 个答案:

答案 0 :(得分:0)

我认为O(m)不可能实现,但是O(mlogn)可以通过二进制搜索(而不是您建议的线性搜索)进行管理,因为范围列表是“已排序的”

O(mlogn)仍可扩展,因为对大n而言,对数函数的增长非常缓慢,在这种情况下,logn与常数之间没有太大差异。

答案 1 :(得分:0)

如果我是你,我会使用pandas.cut函数。

import numpy as np
import pandas as pd
df = pd.DataFrame(data=your_list, columns=["data"])
bins = np.array([0,11,20,35,40,50,62,75,83,90,100])
df["bucket"] = pd.cut(df.data, bins)
print(df.head())

这应该有效。