分组列表



我正在编写一个程序,我需要从列表中分组值:

values = [73.0, 143.0, 323.0, 324.0, 325.0, 325.0, 325.0, 325.0, 325.5,
325.5, 326.0, 326.0, 326.0, 326.0, 406.0, 406.5, 432.5, 433.0,
433.5, 434.5, 435.0, 435.0, 436.0, 436.5, 437.5, 438.0

,当至少有7个元素且相邻元素之间的差小于3.0时,形成一个基团

这是条目被减去的列表:

diff_ar = [70.0, 180.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0,
0.0, 0.0, 80.0, 0.5, 26.0, 0.5, 0.5, 1.0, 0.5, 0.0, 1.0, 0.5,
1.0, 0.5]

预期的输出应该是这样的[(2,12),(16,24)]

我需要返回每组的开始和结束的索引。

我做了这样的事情

list_1 = [y - x for x,y in zip(values,values[1:]) if (y-x)<=3.0]

输出如下:

[1.0, 1.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.5, 0.5, 0.5, 1.0, 0.5, 0.0, 1.0, 0.5, 1.0, 0.5]

但现在我不知道如何分组。如果你们中有人能帮忙,我将不胜感激。

使用itertools.groupby:

from itertools import groupby
values = [73.0, 143.0, 323.0, 324.0, 325.0, 325.0, 325.0, 325.0, 325.5,
325.5, 326.0, 326.0, 326.0, 326.0, 406.0, 406.5, 432.5, 433.0,
433.5, 434.5, 435.0, 435.0, 436.0, 436.5, 437.5, 438.0]
# find the differences
differences = map(lambda x: (x[1] - x[0]) <= 3, zip(values, values[1:]))
index, result = 0, []
for diff_le_3, group in groupby(differences):
element_count = sum(1 for _ in group)
if diff_le_3 and element_count >= 7:
result.append((index, index + (element_count - 1)))
index += element_count
print(result)

[(2, 12), (16, 24)]

最新更新