首页 > 解决方案 > 查找整数列表中是否存在山谷

问题描述

如果一个整数列表由一系列严格递减的值和一系列严格递增的值组成,则称该列表为谷。递减序列和递增序列的长度必须至少为 2。递减序列的最后一个值是递增序列的第一个值。

编写一个 Python 函数 valley(l),它接受一个整数列表,如果 l 是一个山谷,则返回 True,否则返回 False。

这里有一些例子来展示你的函数应该如何工作。

>>> valley([3,2,1,2,3])
True

>>> valley([3,2,1])
False

>>> valley([3,3,2,1,2])
False

我已经两天没睡了,我能写的最好的就是这段代码

def valley(list):
    first =False
    second=False
    midway=0
    if(len(list)<2):
        return False
    else:
        for i in range(0,len(list)):
            if(list[i]<list[i+1]):
                first=True
                midway=i
                break
        for j in range(midway,len(list)-1):
            if(list[j]<list[j+1] and j+1==len(list)):
                Second=True
                break
            if(list[j]>=list[j+1]):
                second=False
                break
    if(first==True and second==True):
        return True
    else:
        return False

标签: pythonalgorithm

解决方案


我发现的解决方案也适用于如果数字不是完美的顺序并且最小值必须等于 1,我想说的是如果列表是假设 [14,12,10, 5,3,6,7,32,41],这里也形成了一个山谷,因为值下降到 3(最低),然后再次增加。列表如 [4,3,2,1,2,3,4] 是一个完美的山谷。

解决方案:

def valley(lst):
if len(lst)<2:
    return False
else:
    p = lst.index(min(lst))
    for i in range (0,p):
        x = (lst[i] > lst[i+1])

    for q in range (p,len(lst)-1):
        y = (lst[q]< lst[q+1])

    return (x==y)

如果这解决了问题并且最有帮助,请不要忘记接受它,谢谢。


推荐阅读