如何实现按照指定区间进行分组

假设有这样1组数据:

data = [10,11,23,14,45,23,4,5,20,34,29,42,52,7,57]

其最大值为57,而最小值为3,现在想将其分为5组,每组的取值范围为11。即数值在0-11为1组,数值在11-22为另外1组,以此类推。
现在希望得到类似如下的结果:

[10, 11, 4, 5, 7]
[23, 14, 23, 20]
[34, 29]
[45, 42]
[52, 57]

如何使用最少的for或while循环实现上述的结果。

阅读 9.6k
2 个回答

如果真像你说的0-11,11-22这样类推出去,你给出的结果是错误的

from itertools import groupby

data = [10,11,23,14,45,23,4,5,20,34,29,42,52,7,57]
data.sort()

for k, g in groupby(data, key=lambda x: (x - 1) / 11):
    print '{}-{}'.format(k * 11, (k + 1) * 11), list(g)
    
#得出的结果应该是:
0-11  [4, 5, 7, 10, 11]
11-22 [14, 20]
22-33 [23, 23, 29]
33-44 [34, 42]
44-55 [45, 52]
55-66 [57]
#!/usr/bin/ruby
data.each.inject({}) { |h,n| (h[n/11] ||= []) && h[n/11] << n && h }.sort.to_h.each_value { |val| p val }

给出的需求分类标准有点问题, 所以根据需求可以自己改一下.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题