查找数组中最低/最长序列的初始位置

时间:2018-08-04 04:22:06

标签: python python-3.6

类似于睡眠周期警报,我需要在最小/最大值范围内,将数组切到尽可能最佳的位置(在我的方案中为低数字)。

为简化起见,如果我能够找到数组中最长的最低序列,我想我可以继续前进。

例如:

[1,2,3,0,1,4,5,6,6,0.1,1.1,2,4]

应返回9,因为0.1是最长的最低值的第一个值,即使我的值小于0.1;

[4,5,7,10,0.13,0.2,0.12,8,9,28,0.1,0.11,0.102]

应该返回10,因为它小于1,即使该序列具有相同数量的数字...

长序列(在我的场景中)比低序列更重要。知道如何开始吗?我没有阈值,但是我认为(如果是即时计算的)涉及此的解决方案应该可以

1 个答案:

答案 0 :(得分:0)

我不确定“最长的最低价”背后的复杂逻辑,但这可能是一个不错的开始:

data = [4,5,7,10,0.13,0.2,0.12,8,9,28,0.1,0.11,0.102]

result = [[0,0]]
threshold = 1.0
for num, val in enumerate(data) :
    if val < threshold :
        if result[-1][1] == 0 :   # start a new sequence
            result[-1][0] = num
            result[-1][1] = 1
        else :                    # continue existing sequence
            result[-1][1] += 1
    else :    # end the previous sequence
        if result[-1][1] > 0 :
            result.append([0,0])

返回(第一个元素,序列长度)对:

[[4, 3], [10, 3]]

您可以进一步分析第一个元素的长度,值或您喜欢的任何内容。