gpt4 book ai didi

python - 识别列表中相似数字的组

转载 作者:行者123 更新时间:2023-11-28 19:43:19 24 4
gpt4 key购买 nike

我有一些数字列表,我想按相似性对其进行分组。列表中数字的顺序是固定的,需要保留。

例如,这是我要实现的目标的可视化:

Black line is the list of numbers, green lines are the identified groups of similar numbers I'd like to identify, corresponding with that section of the list.

黑线代表我拥有的数字列表。绿线代表我想在此示例列表中标识的分组。

列表中数字的顺序很重要,不能更改(例如不能升序或降序排序)。列表中的数字不是连续的(即不可能是 6, 6, 6, 6 的列表,但可能类似于 5.85, 6.1, 5.96, 5.88).

有没有办法做到这一点?

编辑:示例值和所需的分组:

[4.1, 4.05, 4.14, 4.01, 3.97, 4.52, 4.97, 5.02, 5.05, 5.2, 5.18, 3.66, 3.77, 3.59, 3.72]

将导致大致分组

[(4.1, 4.05, 4.14, 4.01, 3.97, 4.52), (4.97, 5.02, 5.05, 5.2, 5.18), (3.66, 3.77, 3.59, 3.72)]

在上面的分组中,您可能会争辩说 4.52 可能属于第一组或第二组。如果像我在上面的例子中那样可视化,分组将由绿线表示。我的列表实际上有几百到几千个值。

最佳答案

您可以使用 itertools.groupby - 它将连续元素与给定键函数的相同结果组合在一起(在本例中为 round):

In [7]: import itertools

In [8]: data = [4.1, 4.05, 4.14, 4.01, 3.97, 4.52, 4.97, 5.02, 5.05, 5.2, 5.18, 3.66, 3.77, 3.59, 3.72]

In [9]: [tuple(xs) for _, xs in itertools.groupby(data, round)]
Out[9]:
[(4.1, 4.05, 4.14, 4.01, 3.97),
(4.52, 4.97, 5.02, 5.05, 5.2, 5.18),
(3.66, 3.77, 3.59, 3.72)]

关于python - 识别列表中相似数字的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34438313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com