python中一个简单的1-D峰值发现程序

时间:2016-07-24 23:25:10

标签: python arrays python-2.7 python-3.x

在1-D python列表中的峰值查找程序,如果(arr [x]> arr [x + 1]和arr,则列表'arr'中的索引'x'返回其索引的峰值[x]> arr [x-1])。 特殊情况 案例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

2 个答案:

答案 0 :(得分:1)

您的问题在于循环初始化

for x in lst:

通过这个循环,对于你的上一个例子,x将是4,然后是3,然后是2,然后是1.

根据你的代码的外观,你似乎想说:

for x in range(len(lst)):

这将迭代列表的索引而不是列表中的值。你的代码看起来工作的原因是因为在你的测试用例中,列表的值与列表的索引非常匹配 - 考虑将来会有更多不同的测试。

答案 1 :(得分:1)

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"