计算一组范围内的元素数量

我在编写一个将 2 个参数(值、分隔符)作为列表并将每个范围中的元素数(由分隔符中的数字确定)作为一个列表返回的函数时遇到了麻烦。等于其中一个分隔符的元素应计入下面的 bin 中。


我使用 if 和 elif 对数字进行排序,这在某种程度上给了我正确的想法。但是,我正在努力研究如何应用“箱数 = 分隔线数 + 1”这一事实


def histogram(values, dividers):

    count1 = 0

    count2 = 0

    count3 = 0

    index = 0

    for index in range(len(values)):

        if values[index] <= min(dividers):

           count1 = count1 + 1

        elif min(dividers) < values[index] <= min(dividers):

           count2 = count2 + 1

        elif values[index] > max(dividers):

           count3 = count3 + 1

        index = index + 1 

    print("Number of elements in each bin is ", [count1, count2, count3])

例如,当我运行参数 ([1,...,10], [2,5,7]) 时,答案应该是 [2,3,2,3] 因为范围内的元素数量低于 2, 2~5(不含5)、5~7(不含7)及7以上分别为2、3、2、3。但是目前,我得到了输出 [2,5,3]。


PS 我的目标是在不使用 numpy.histogram 或任何 matplotlib 相关内容的情况下编写函数


FFIVE
浏览 103回答 1
1回答

慕后森

这不是最有效的实现,但它不假定values已排序(只有分隔符是):def histogram(values, dividers):&nbsp; &nbsp; bins = [0]*(len(dividers)+1)&nbsp; &nbsp; extended_dividers = [-float('inf')]+dividers+[float('inf')]&nbsp; &nbsp; for idx, divider in enumerate(extended_dividers[:-1]):&nbsp; &nbsp; &nbsp; &nbsp; bins[idx] = len([v for v in values if divider<v<=extended_dividers[idx+1]])&nbsp; &nbsp; return bins另外,您的示例中的输出不应该是 1、2、3、4 吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python