Python 如何查找数组中最长的连续数字链

Python 如何查找数组中最长的连续数字链,python,arrays,Python,Arrays,例如,我们有[0,1,3,5,7,8,9,10,12,13] 结果必须是7,8,9,10,因为它们彼此相邻、按索引排列并且是连续整数,而且此链比0,1长 英语不是我的第一语言,如果文字有点晦涩,请原谅 根据递增计数(由对象提供)的恒定差异,将项目分组为子序列,然后使用关键参数len上的内置max获取最长子序列: from itertools import groupby, count lst = [0, 1, 3, 5, 7, 8, 9, 10, 12, 13] c = count() val

例如,我们有
[0,1,3,5,7,8,9,10,12,13]

结果必须是
7,8,9,10
,因为它们彼此相邻、按索引排列并且是连续整数,而且此链比
0,1


英语不是我的第一语言,如果文字有点晦涩,请原谅

根据递增计数(由对象提供)的恒定差异,将项目分组为子序列,然后使用关键参数
len上的内置
max
获取最长子序列:

from itertools import groupby, count

lst = [0, 1, 3, 5, 7, 8, 9, 10, 12, 13]
c = count()
val = max((list(g) for _, g in groupby(lst, lambda x: x-next(c))), key=len)
print(val)
# [7, 8, 9, 10]

您可以将组键包括在结果中(被抑制为
),以进一步了解其工作原理。

使用模块的替代解决方案:

输出:

[7, 8, 9, 10]

  • np.where(np.diff(nums)!=1)[0]+1
    -获取数组应拆分的元素的索引(如果两个连续数之间的差值不等于
    1
    ,例如
    3
    5

  • np.split(…)
    -将数组拆分为子数组

代码

使用(类似于@Moses Koledoye的回答):

另类

以第三方工具为例:


这不是作业,我正试图用这个方法解决一个问题,但似乎无法用for循环解决:如果n[7, 8, 9, 10]
groups = [[y[1] for y in g] for k, g in itertools.groupby(enumerate(iterable), key=lambda x: x[0]-x[1])]
groups
# [[0, 1], [3], [5], [7, 8, 9, 10], [12, 13]]

max(groups, key=len)
# [7, 8, 9, 10]
import more_itertools as mit


iterable = [0, 1, 3, 5, 7, 8, 9, 10, 12, 13]
max((list(g) for g in mit.consecutive_groups(iterable)), key=len)
# [7, 8, 9, 10]