【问题标题】:Grouping values into equal range bins将值分组到相等范围的 bin
【发布时间】:2019-11-24 13:44:43
【问题描述】:

假设我有一组值[1, 4, 8, 9, 12, 15]

我希望将这些按相等范围的箱分组, 例如。 1-5, 6-10, 11-15, 16-20, ...

使用上面的一组值,输出将适合这样的 bin: [1, 4], [8, 9], [12, 15]

有没有pythonic的方式来解决这个问题?

【问题讨论】:

  • 看看使用整数除法。到目前为止你有没有尝试过?
  • 我建议将您的编辑添加为答案,如果解决了您的问题,请接受它

标签: python


【解决方案1】:

你可以使用列表推导:

r = 5
l = [1, 4, 8, 9, 12, 15]
bins = [1 + i*r for i in range(max(l)//r + 1)]
bins_list = [[x for x in l if bins[i]<= x < bins[i+1]] for i in range(len(bins)-1)]
print(bins_list) 
# [[1, 4], [8, 9], [12, 15]]

【讨论】:

    【解决方案2】:

    给人的印象是groupby 函数只接受带有布尔输出的键,例如。 lambda l : l % 2 == 0

    我已经这样修改了:

    def create_grouping(threshold: int):
        return itertools.groupby(values, lambda l: l // threshold)
    

    这会返回一个分组列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      相关资源
      最近更新 更多