python中一个简单的一维峰值查找程序
一维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中一个简单的一维峰值查找程序,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的情况下,它不起作用。其完美的工作是在中间的高峰和在最后的高峰。
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且x您的问题在于循环的初始化
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分钟再接受也是如此