python - 计算列表中大于其邻居的数字

标签 python list count local maxima

我想在列表中找到一个峰值。

  1. 我想知道一个数字是否比他的邻居大。
  2. 如果它是列表中的第一个对象,我只想检查他是否比他后面的对象大。
  3. 如果它是列表中的最后一个对象,我想检查他之前的那个。
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/

相关文章:

python - 在 Google App Engine 上模拟浏览器

python - 使用 Python 和 Pillow,我们如何计算 PNG 或 JPG 图像中唯一颜色的数量?

python - 在保持项目排序的同时从列表中获取随机样本?

python - 双 for 循环列表理解

php - mysql中如何根据where进行计数? PHP

python - 如何为多个 HTML 表单提供单一 View - Django

python - 如何在OpenCV中使用C++在scikit-image中实现SametimeTransform而无需使用EstimateRigidTransform?

list - 理解 Prolog 列表和递归

python - 计算python中值的数量

MYSQL 将一个表中的一列连接到另一个表中的两个 count()