将列表元素分组为用户定义的间隔

时间:2017-11-13 06:58:13

标签: python histogram

def interval():
    data = [1, 2, 12, 13, 22, 23, 32, 33, 42, 43, 52, 53, 62, 63, 72, 73, 82, 83, 92, 93]
    minimum = raw_input("Enter the min value")
    maximum = raw_input("Enter the max value")
    frequency = raw_input("Enter the Freq")
    x = []
    x.append(float(minimum))
    thesum = float(minimum)
    for i in range(0, int(maximum)):
        if thesum < float(maximum):
            thesum = thesum + float(frequency)
            x.append(thesum)
    print x 

if __name__ == '__main__':
    interval()

**假设用户分别输入min,max和freq为0,100,20。 因此,间隔为0-20,20-40,40-60,60-80,80-100,我的输出应为

0-20中的值是[1,2,12,13] 20-40的数值是[22,23,32,33] .. 等等! **

如果特定时间间隔内没有值,则输出应该是没有值的列表

1 个答案:

答案 0 :(得分:1)

实现这一目标的一种非常天真的方式如下

def group_items(data, low_value, high_value):
    return [value for value in data if value >= low_value and value <= high_value]

此函数返回[min, max]范围内存在的数字列表,因此max中将(min,max) and (min+freq, max+freq)计算max,因为第一个时间间隔的min+freq为{下一个间隔的{1}}。当然,您可以根据您的要求进行更正。

min_max_pairs = []
for x in xrange(minimum, maximum, frequency):
    pair = (x, x+frequency)
    min_max_pairs.append(pair)

这将使用频率间隔从用户指定的最小值到最大值创建映射。在您的情况下,min,max和freq中的值为

minimum = raw_input("Enter the min value")
maximum = raw_input("Enter the max value")
frequency = raw_input("Enter the Freq")

返回对,如下所示:

>>> min_max_pairs
[(0, 20), (20, 40), (40, 60), (60, 80), (80, 100)]

现在遍历对并将它们传递给group_items()以获得所需的结果

for pair in min_max_pairs:
    min = pair[0]
    max = pair[1]
    interval = freq
    print ("Range [",min,"-",max,"] : ", group_items(data, min, max))

导致

Range [ 0 - 20 ]:  [1, 2, 12, 13]
Range [ 20 - 40 ]:  [22, 23, 32, 33]
Range [ 40 - 60 ]:  [42, 43, 52, 53]
Range [ 60 - 80 ]:  [62, 63, 72, 73]
Range [ 80 - 100 ]:  [82, 83, 92, 93]