You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用NumPy对列表中的相近数字进行分组?Python能否实现整数列表相近整数元素的分组?

如何用Python/NumPy对整数列表中的相近元素分组?

当然可以!不管是用纯Python还是NumPy,都能轻松实现这个相近整数分组的需求。我来给你一步步拆解实现方法:

一、纯Python实现方案

核心思路很简单:先把列表排序(这样相近的数会挨在一起),然后遍历元素,根据设定的“相近阈值”来判断是否加入当前分组或者新建分组。如果需要去重(比如你的示例结果里去掉了重复的3),也可以先做去重处理。

x = [1,3,2,89,26,31,35,78,5,3,70]
# 先排序并去重(如果不需要去重可以去掉list(set(x)),直接用sorted(x))
sorted_x = sorted(list(set(x)))
# 定义“相近”的阈值:当元素与当前组最后一个元素的差超过这个值时,新建分组
threshold = 20

groups = []
for num in sorted_x:
    if not groups:
        # 第一个元素直接作为第一个分组
        groups.append([num])
    else:
        last_in_group = groups[-1][-1]
        if num - last_in_group <= threshold:
            # 差值在阈值内,加入当前分组
            groups[-1].append(num)
        else:
            # 差值超过阈值,新建分组
            groups.append([num])

print(groups)
# 输出正好符合你的期望:[[1, 2, 3, 5], [26, 31, 35], [70, 78, 89]]

二、NumPy实现方案

如果处理的是大规模数据,NumPy的向量化操作会比纯Python循环高效很多。实现思路和纯Python类似,但用NumPy的内置函数来简化步骤:

import numpy as np

x = [1,3,2,89,26,31,35,78,5,3,70]
arr = np.array(x)
# 排序并去重,一步完成
sorted_arr = np.unique(np.sort(arr))
threshold = 20

# 计算相邻元素的差值
diff = np.diff(sorted_arr)
# 找到差值超过阈值的位置,加1是因为分割点在当前元素的下一个位置
split_positions = np.where(diff > threshold)[0] + 1
# 根据分割点拆分数组
groups = np.split(sorted_arr, split_positions)
# 把NumPy数组转换成普通列表格式
groups = [list(group) for group in groups]

print(groups)
# 输出同样符合期望:[[1, 2, 3, 5], [26, 31, 35], [70, 78, 89]]

关键注意点

这里的threshold(阈值)是核心参数,你可以根据自己对“相近”的定义来调整。比如如果你的“相近”是指组内任意两个元素的差不超过某个值,可能需要稍微调整逻辑,但上面的代码基于相邻元素差超过阈值则分组的逻辑,完美匹配你给出的示例结果。

内容的提问来源于stack exchange,提问作者Smart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:17:36