我有一个列表:
d = [23, 67, 110, 25, 69, 24, 102, 109]
如何将最近的值与动态间隙分组,并创建这样的元组,最快的方法是什么? :
[(23, 24, 25), (67, 69), (102, 109, 110)]
def group_close_integers(data, gap):
"""将具有最接近值的整数列表分组。
参数:
data:要分组的整数列表。
gap:允许的最大差距。
返回值:
分组整数列表。
"""
if not data:
return []
data.sort()
groups = [[data[0]]]
current_group_index = 0
for i in range(1, len(data)):
if data[i] - data[i - 1] <= gap:
groups[current_group_index].append(data[i])
else:
groups.append([data[i]])
current_group_index += 1
return [tuple(group) for group in groups]
d = [23, 67, 110, 25, 69, 24, 102, 109]
print(group_close_integers(d, 5))
# 输出:[(23, 24, 25), (67, 69), (102, 109, 110)]
本代码的工作原理如下:
-
对列表进行排序:
首先,使用
data.sort()
对输入列表data
进行排序。此步骤可确保我们按顺序处理数字,从而简化分组过程。 -
初始化组:
创建一个名为
groups
的列表来存储结果组,并在第一个组中添加第一个数字[data[0]]
。 - 遍历排序列表: 使用循环遍历排序后的列表,从第二个元素开始(索引 1)。
-
检查间隙:
对于每个元素,检查当前元素与前一个元素之间的差异是否小于或等于允许的
gap
。 -
如果间隙在限制范围内,
将当前元素添加到
groups
中的当前组。 - 如果间隙大于限制, 开始一个新组并将当前元素添加到该组。
-
返回结果:
遍历完所有元素后,返回
groups
列表,其中包含按指定间隙分组的整数。
此代码为确定哪些数字彼此“接近”提供了一种灵活且可配置的方式,允许通过调整
gap
参数来控制分组的严格程度。