给定一个数字列表,找到一个可以覆盖最多数字的固定范围
Given a list of numbers, find a fix range that can cover the most numbers
在python中,我们可以使用计数器来查找列表中最常见的元素。
有没有什么办法可以传入函数,让落在一定范围内的元素反算。
假设我有 [123, 127, 99,75,86, 83,81],我想 return 类似 {'12X':2, '8X':3, '99 ':1, '75':1}
有什么想法吗?
根据上下文,您尝试执行的操作可能是:
合并
这是将您的元素分组到大小相等或预定义的离散箱/桶中。使用 Pandas:
这样的库很容易做到这一点
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.cut.html
>>> pandas.cut([123, 127, 99, 75, 86, 83, 81], 4, labels=False)
array([3, 3, 1, 0, 0, 0, 0])
(上面写着“123 和 127 在第 3 组,99 在第 1 组,75、86、83、81 在第 0 组”)。
聚类
当您不知道这些值但知道它们形成组时,这就是将您的元素分组。
像“1,2,3,11,12,13”显然是两个簇“1,2,3”和“11,12,13”。
聚类数据的一种简单好用的方法是 K-means but there's other algorithms, you should take a look at scipy。
>>> import sklearn.cluster
>>> import numpy as np
>>>
>>> kmeans = sklearn.cluster.KMeans(n_clusters=4)
>>> kmeans.fit_predict(numpy.array([123, 127, 99, 75, 86, 83, 81]).reshape(-1, 1))
array([0, 0, 2, 3, 1, 1, 1], dtype=int32)
这个给了123和127一起,一个给了99,一个给了75,一起给了81 83 86。
分组
这是一个简单的 "GROUP BY" ala SQL,当你可以提供一个函数时,returns 你的值应该是:
喜欢:
>>> from itertools import groupby
>>> for key, group in groupby([123, 127, 99, 75, 86, 83, 81], lambda x: int(x / 10)):
... print(key, list(group))
...
12 [123, 127]
9 [99]
7 [75]
8 [86, 83, 81]
在python中,我们可以使用计数器来查找列表中最常见的元素。 有没有什么办法可以传入函数,让落在一定范围内的元素反算。
假设我有 [123, 127, 99,75,86, 83,81],我想 return 类似 {'12X':2, '8X':3, '99 ':1, '75':1}
有什么想法吗?
根据上下文,您尝试执行的操作可能是:
合并
这是将您的元素分组到大小相等或预定义的离散箱/桶中。使用 Pandas:
这样的库很容易做到这一点http://pandas.pydata.org/pandas-docs/stable/generated/pandas.cut.html
>>> pandas.cut([123, 127, 99, 75, 86, 83, 81], 4, labels=False)
array([3, 3, 1, 0, 0, 0, 0])
(上面写着“123 和 127 在第 3 组,99 在第 1 组,75、86、83、81 在第 0 组”)。
聚类
当您不知道这些值但知道它们形成组时,这就是将您的元素分组。
像“1,2,3,11,12,13”显然是两个簇“1,2,3”和“11,12,13”。
聚类数据的一种简单好用的方法是 K-means but there's other algorithms, you should take a look at scipy。
>>> import sklearn.cluster
>>> import numpy as np
>>>
>>> kmeans = sklearn.cluster.KMeans(n_clusters=4)
>>> kmeans.fit_predict(numpy.array([123, 127, 99, 75, 86, 83, 81]).reshape(-1, 1))
array([0, 0, 2, 3, 1, 1, 1], dtype=int32)
这个给了123和127一起,一个给了99,一个给了75,一起给了81 83 86。
分组
这是一个简单的 "GROUP BY" ala SQL,当你可以提供一个函数时,returns 你的值应该是:
喜欢:
>>> from itertools import groupby
>>> for key, group in groupby([123, 127, 99, 75, 86, 83, 81], lambda x: int(x / 10)):
... print(key, list(group))
...
12 [123, 127]
9 [99]
7 [75]
8 [86, 83, 81]