![](/img/trans.png)
[英]A function to check for hill or valley in a given list, without usage of Numpy or zip?
[英]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.