Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中一个简单的一维峰值查找程序_Python_Arrays_Python 2.7_Python 3.x - Fatal编程技术网

python中一个简单的一维峰值查找程序

python中一个简单的一维峰值查找程序,python,arrays,python-2.7,python-3.x,Python,Arrays,Python 2.7,Python 3.x,一维python列表中的一种峰值查找程序,对于列表“arr”if(arr[x]>arr[x+1]和arr[x]>arr[x-1])中的索引“x”,该程序返回一个峰值及其索引if。 特例 案例1:在第一个元素的情况下。仅将其与第二个元素进行比较。如果arr[x]>arr[x+1],则找到峰值。 案例2:最后一个元素。与前面的元素进行比较。如果arr[x]>arr[x-1],则找到峰值。 下面是代码。 由于某些原因,在峰值位于索引=0的情况下,它不起作用。其完美的工作是在中间的高峰和在最后的高峰。

一维python列表中的一种峰值查找程序,对于列表“arr”if(arr[x]>arr[x+1]和arr[x]>arr[x-1])中的索引“x”,该程序返回一个峰值及其索引if。 特例 案例1:在第一个元素的情况下。仅将其与第二个元素进行比较。如果arr[x]>arr[x+1],则找到峰值。 案例2:最后一个元素。与前面的元素进行比较。如果arr[x]>arr[x-1],则找到峰值。 下面是代码。 由于某些原因,在峰值位于索引=0的情况下,它不起作用。其完美的工作是在中间的高峰和在最后的高峰。 非常感谢您的帮助

import sys
def find_peak(lst):
    for x in lst:
        if x == 0 and lst[x] > lst[x+1]:
            print "Peak found at index", x
            print "Peak :", lst[x]
            return

        elif x == len(lst)-1 and lst[x] > lst[x-1]:
            print "Peak found at index", x
            print "Peak :", lst[x]
            return

        elif x > 0 and x < len(lst)-1:
            if  lst[x] > lst[x+1] and lst[x] > lst[x-1]:
                print "Peak found at index", x
                print "Peak :", lst[x]
                return

    else :
        print "No peak found"

def main():
    lst = []
    for x in sys.argv[1:]:
    lst.append(int(x))

    find_peak(lst)

if __name__ == '__main__':
    main()

Anuvrats-MacBook-Air:Python anuvrattiku$ python peak_finding_1D.py 1 2 3 4 
Peak found at index 3
Peak : 4
Anuvrats-MacBook-Air:Python anuvrattiku$ python peak_finding_1D.py 1 2 3 4 3
Peak found at index 3
Peak : 4
Anuvrats-MacBook-Air:Python anuvrattiku$ python peak_finding_1D.py 4 3 2 1
No peak found
导入系统 def查找_峰值(lst): 对于lst中的x: 如果x==0且lst[x]>lst[x+1]: 打印“在索引处找到峰值”,x 打印“峰值:”,lst[x] 返回 elif x==len(lst)-1和lst[x]>lst[x-1]: 打印“在索引处找到峰值”,x 打印“峰值:”,lst[x] 返回 如果x>0且xlst[x+1]和lst[x]>lst[x-1]: 打印“在索引处找到峰值”,x 打印“峰值:”,lst[x] 返回 其他: 打印“未找到峰值” def main(): lst=[] 对于sys.argv[1:]中的x: 第一个附加(int(x)) 查找_峰(lst) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': main() Anuvrats MacBook Air:Python Anuvratiku$Python peak_finding_1D.py 1 2 3 4 指数3处出现峰值 峰值:4 Anuvrats MacBook Air:Python Anuvratiku$Python peak_finding_1D.py 1 2 3 4 3 指数3处出现峰值 峰值:4 Anuvrats MacBook Air:Python Anuvratiku$Python peak_finding_1D.py 4 3 2 1 未发现峰值
您的问题在于循环的初始化

for x in lst:
在这个循环中,对于您的最后一个示例,x将是4,然后是3,然后是2,然后是1

从代码的外观来看,您似乎想说:

for x in range(len(lst)):

这将迭代列表的索引,而不是列表中的值。代码出现的原因是因为在测试用例中,列表的值与列表的索引紧密匹配——在将来考虑更多不同的测试。

< P> X是代码中的列表元素,并且使用它作为索引。

你应该写:

def find_peak(lst):
    for i,x in enumerate(lst):
        if i == 0 and x > lst[i+1]:
            print "Peak found at index", i
            print "Peak :", x
            return

        elif i == len(lst)-1 and x > lst[i-1]:
            print "Peak found at index", i
            print "Peak :", x
            return

        elif i > 0 and i < len(lst)-1:
            if  x > lst[i+1] and x > lst[i-1]:
                print "Peak found at index", i
                print "Peak :", x
                return

    else :
        print "No peak found"
def查找峰值(lst):
对于枚举(lst)中的i,x:
如果i==0且x>lst[i+1]:
打印“在索引处找到峰值”,i
打印“峰值:”,x
返回
elif i==len(lst)-1和x>lst[i-1]:
打印“在索引处找到峰值”,i
打印“峰值:”,x
返回
如果i>0且ilst[i+1]和x>lst[i-1]:
打印“在索引处找到峰值”,i
打印“峰值:”,x
返回
其他:
打印“未找到峰值”

感谢James的澄清。没问题-如果您能通过单击答案左侧的复选标记接受答案(如果这对您有帮助的话),那就太好了!当然可以,但让我等8分钟再接受也是如此