繁体   English   中英

用于检查列表是否为谷的 Python 程序

[英]Python program to check whether a list is a valley or not

山谷的例子:

9,6,5,4,10,13,40,55,68

列表必须严格递减,直到某一点,然后列表必须严格递增。 然后它被认为是一个山谷。

约束:

使用两个指针方法

伙计们,我想出了这个代码:


def isValley(n,j,n1):
    i = 0
    res = False
    while(i<j):
        if (n[i]>n[i+1]) and (n[j]>n[j-1]):
                n1.append(1)
        else:
            n1.append(0)
        res = n1.count(n1[0]) == len(n1)
        i+=1
        j-=1
    print(n1)
    if res:
        if(n1[0] == 1):
            print("Valley")
        else:
            print("Not a valley")
    else:
        print("Not a valley")

n = list(map(int,input("Enter the numbers : ").split()))
n1 = []
j = len(n)-1
print(n)
isValley(n,j,n1)

我的代码仅在元素左侧的元素数量等于元素右侧的元素数量时才有效。

请更正这一点并提出一个无论数字如何都能满足的代码

元素左侧和元素右侧的元素。

暗示:

我认为我在进行比较时遇到了问题

(仅使用两指针方法)

请帮帮我

我认为您可以从左到右(以及从右到左)迭代,而元素严格减少(增加)。 那么它是一个山谷当且仅当指针最终在同一位置

def isValley(array):
    N = len(array)
    front_i = 0
    back_i = N-1
    while front_i < N-1 and array[front_i] > array[front_i + 1]:
        front_i += 1
    while back_i > 0 and array[back_i] > array[back_i - 1]:
        back_i -= 1
    is_valley = (front_i == back_i)
    return is_valley

print(isValley([9,6,5,4,10,13,40,55,68])) # prints True

您可以检查是否存在严格的负梯度,然后是严格的正梯度。 这样做的一种方法(使用 numpy)是:

import numpy as np

def isValley(array):
    d = np.diff(array)
    return (
        np.array_equal(
            np.concatenate((np.argwhere(d < 0), np.argwhere(d > 0))).flatten(),
            np.arange(len(array) - 1)
        )
    )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM