我想在列表中找到一个峰值。
- 我想知道一个数字是否比他的邻居大。
- 如果它是列表中的第一个对象,我只想检查他是否比他后面的对象大。
- 如果它是列表中的最后一个对象,我想检查他之前的那个。
def peaks(lst):
num = 0
leni = len(lst)
print(leni)
for i in range(1,leni - 1):
if lst[i] > lst[i-1] and lst[i] > lst[i+1]:
num = num + 1
for i in range(leni):
print(i)
if i == 0:
if lst[i] > lst[i+1]:
num = num + 1
elif i == leni+1:
if lst[i] > lst[i-1]:
num = num + 1
return num
当它应该检查最后一个对象时,这段代码不起作用。
当我尝试 [1,2,3]
时,我得到的是 0
而不是 1
。
最佳答案
您可以通过使边界特殊情况不再那么特殊来做一些技巧来计算峰值:
def peaks(lst):
lst = [float("-inf")] + lst + [float("-inf")]
return sum(a < b > c for a, b, c in zip(lst, lst[1:], lst[2:]))
关于python - 计算列表中大于其邻居的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65341187/