python - 对列表中的相似元素进行分组
问题描述
是否有任何更有效的算法或预建函数可以将列表中的相似元素分组并返回其索引列表。
类似,我的意思是对列表中的数字进行四舍五入,结果相同,
此外,列表没有排序,我的目标是根据未排序的列表进行索引
例如,
data = [11.12438802, #0 -+
11.31071615, #1 |
11.2988151, #2 |
11.29753906, #3 -+
17.46925781, #4 -+
17.77536458, #5 |
17.7358724, #6 -+
16.64058594, #7 -+
16.64875, #8 -+
8.091575521, #9 -+
8.089322917, #10 |
8.084231771, #11 |
8.08842447, #12 |
8.072473958, #13 |
8.034036458] #14 -+
我的预期结果是indexes = [ [0,3] , [4,6] , [7,8] , [9,14] ]
解决方案
IIUC
>>> from itertools import groupby
>>> groups = groupby(enumerate(data), key=lambda x: int(x[1]))
>>> lists = (list(g[1]) for g in groups)
>>> [[l[0][0], l[-1][0]] for l in lists]
[[0, 3], [4, 6], [7, 8], [9, 14]]