例如,我們有[0, 1, 3, 5, 7, 8, 9, 10, 12, 13]
。如何查找數組中最長的連續數字鏈
結果必須是7, 8, 9, 10
,因爲它們彼此相鄰,指數明智並且是連續的整數,並且該鏈比0, 1
長。
英語不是我的第一語言,請原諒,如果寫作有點模糊。
例如,我們有[0, 1, 3, 5, 7, 8, 9, 10, 12, 13]
。如何查找數組中最長的連續數字鏈
結果必須是7, 8, 9, 10
,因爲它們彼此相鄰,指數明智並且是連續的整數,並且該鏈比0, 1
長。
英語不是我的第一語言,請原諒,如果寫作有點模糊。
組項目到基於從增加計數(由itertools.count
對象提供)常數差異使用itertools.groupby
子序列,然後使用內置max
上鍵參數len
取最長子:
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]
您可以在結果中包含組密鑰(禁止爲_
)以進一步瞭解其工作原理。
這真是太棒了。 –
替代解決方案:
import numpy as np
nums = np.array([0, 1, 3, 5, 7, 8, 9, 10, 12, 13])
longest_seq = max(np.split(nums, np.where(np.diff(nums) != 1)[0]+1), key=len).tolist()
print(longest_seq)
輸出:
[7, 8, 9, 10]
np.where(np.diff(nums) != 1)[0]+1
- 得到在其上排列應拆分元素的索引(如果差在兩個連續數字之間不等於1
,例如3
和5
)
np.split(...)
- 分裂數組子陣列
https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.diff.html#numpy.diff https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.split.html
某種類型的代碼高爾夫球或功課這裏 – fechnert
的你嘗試過這麼遠嗎? – Nuageux
這不是家庭作業,我試圖用這種方法解決問題,但似乎無法解決它 –