让我们说我有一个清单:
L = [15,16,57,59,14]
Run Code Online (Sandbox Code Playgroud)
该列表包含不太准确的测量:即元素的实际值是记录值的+ -2.所以14,15和16可以具有相同的值.我想要做的是独特地列出该列表,同时考虑到测量误差.因此输出应该是:
l_out = [15,57]
Run Code Online (Sandbox Code Playgroud)
要么
l_out = [(14,15,16),(57,59)]
Run Code Online (Sandbox Code Playgroud)
使用for循环生成任何结果都没有问题.但是,我很好奇是否有更优雅的解决方案.想法很受欢迎.
正如lazyr在评论中指出的那样,这里也发布了类似的问题.使用群集模块解决我的问题的方法是:
>>> from cluster import *
>>> L = [15,16,57,59,14]
>>> cl = HierarchicalClustering(L, lambda x,y: abs(x-y))
>>> cl.getlevel(2)
[[14, 15, 16], [57, 59]]
Run Code Online (Sandbox Code Playgroud)
或(获得具有每组平均值的唯一列表):
>>> [mean(cluster) for cluster in cl.getlevel(2)]
[15, 58]
Run Code Online (Sandbox Code Playgroud)