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]