【问题标题】:A simple 1-D peak finding program in pythonpython中一个简单的一维寻峰程序
【发布时间】:2016-11-28 05:03:58
【问题描述】:

一维 python 列表中的峰值查找程序,如果 (arr[x] > arr[x+1] 和 arr[ 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

【问题讨论】:

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


    【解决方案1】:

    您的问题在于循环的初始化

    for x in lst:
    

    使用此循环,对于您的最后一个示例,x 将是 4,然后是 3,然后是 2,然后是 1。

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

    for x in range(len(lst)):
    

    这将遍历列表的索引而不是列表中的值。您的代码甚至看起来可以工作的原因是因为在您的测试用例中,列表的值与列表的索引非常匹配 - 考虑将来进行更多不同的测试。

    【讨论】:

    • 感谢詹姆斯的澄清。
    • 没问题 - 如果这对您有帮助的话,如果您可以通过单击答案左侧的复选标记来接受答案,那就太好了!
    • 当然可以,但是 SO 要求我等待 8 分钟才能接受
    【解决方案2】:

    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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 2014-01-22
      • 2017-03-04
      • 1970-01-01
      相关资源
      最近更新 更多