如何检测值超过特定阈值的连续子列表?

时间:2019-03-22 12:03:51

标签: python python-3.x

我有非常基本的编程技能。我的问题是如何检测给定列表的连续子列表,以使子列表的所有成员都超过某个阈值。列表中可能有多个这样的子列表。例如,我们有一个名为list1的列表,如下所示:

list1 =  [5, 10, 9, 11, 22, 19, 23, 2, 2, -1, 1, 4, 5, 19, 20, 40, 32, 34, 7, 3, -2, 4, 5 , 7 , 22, 23, 24, 35]

我希望能够检测到18以上的子列表,并检索该子列表中返回其索引的最小值。 list1中有3个这样的子列表:[22, 19, 23][19, 20, 40, 32, 34][22, 23, 24, 25]。因此,我要寻找的结果是[5, 13, 24],即每个子列表中最小值的索引。有没有简单的方法可以做到这一点?

2 个答案:

答案 0 :(得分:0)

只要我能正确理解您要查找的内容,就可以解决问题。想法是遍历我们的列表并制作大于18的数字的较小列表(templist),然后一旦找到不大于18的数字,我们就知道我们已经完成将其添加到此子列表中并可以检查为最小值,并获取其索引。我只是打印出一些东西,但是您可以通过一些小的更改轻松地保存信息。

list1 = [5, 10, 9, 11, 22, 19, 23, 2, 2, -1, 1, 4, 5, 19, 20, 40, 32, 34, 7, 3, -2, 4, 5 , 7 , 22, 23, 24, 35]
templist = []
for i,l in enumerate(list1):
    if(l > 18):
        templist.append(l)
    else:
        if len(templist) > 0:
            print(i-len(templist)+templist.index(min(templist)),min(templist))
            templist = []
if len(templist) > 0:
    print(i-len(templist)+templist.index(min(templist)),min(templist))
    templist = []

答案 1 :(得分:0)

但是,只要找到与模式不匹配的值,就将进行迭代并临时存储值以及与模式匹配的值的索引。
然后,您需要找到最小的数字并存储它的索引值
清除临时模式存储并继续进行迭代,直到结束

又快又脏,在python中可能看起来像这样:

def get_min_indx(data):
    emin = data[0]
    for e in data:
        # check values
        if e[1] < emin[1]: emin = e
    return emin[0]

def find_pattern(data,pattern_threshold):
    pattern_found = []
    indxs = []

    for idx,e in enumerate(data):
        if e > pattern_threshold:
            # found an element: store it's index and it's value
            pattern_found.append((idx,e))
        elif len(pattern_found) != 0:
            indxs.append(get_min_indx(pattern_found))    
            # reset our pattern_storage
            pattern_found = []
    if len(pattern_found) != 0:
        indxs.append(get_min_indx(pattern_found))
    return indxs


list1 = [5, 10, 9, 11, 22, 19, 23, 2, 2, -1, 1, 4, 5, 19, 20, 40, 32, 34, 7, 3, -2, 4, 5 , 7 , 22, 23, 24, 35]
pattern_threshold = 18

print(find_pattern(list1,pattern_threshold))