【问题标题】:Function, that returns peak values函数,返回峰值
【发布时间】:2016-10-27 05:54:38
【问题描述】:
def peaks(iterable):
    z = []
    i = iter(iterable)
    v2 = next(i)

    try:
        while True:
            v1, v2 = v2, next(i)
            if v1 > v2:
                z.append(v1)
            elif v1 < v2:
                continue
    except StopIteration:
        pass

    return z 

此函数返回一个 int 列表,用于表示可迭代对象中大于它们前后值的值:peaks([0, 1, -1, 3, 8, 4, 3, 5, 4, 3, 8]) 返回 [1, 8, 5]。此结果意味着值 1、8 和 5 严格大于它们之前和之后的值。

但是当我使用[0, 1, -1, 3, 8, 4, 3, 5, 4, 3, 8] 时,它返回[1, 8, 4, 5, 4] 而不是[1, 8, 5]

当我使用[5, 2, 4, 9, 6, 1, 3, 8, 0, 7] 时,它返回[5, 9, 6, 8] 而不是[9, 8]

谁能告诉我如何解决它?谢谢。

【问题讨论】:

  • "elif v2
  • 好的...我改变了它。但它仍然产生相同的结果

标签: python iterator


【解决方案1】:

您返回的值大于以下值。您还需要检查它们是否比以前大。

def peaks(iterable):
    z = []
    i = iter(iterable)

    try:
        v2 = next(i)
        v3 = next(i)
        while True:
            v1, v2, v3 = v2, v3, next(i)
            if v2 > v1 and v2 > v3:
                z.append(v2)
    except StopIteration:
        pass

    return z

print(peaks([0, 1, -1, 3, 8, 4, 3, 5, 4, 3, 8]))  # [1, 8, 5]

[0, 1, 1, 0] 中找不到峰值。希望这就是你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2023-04-05
    • 2021-09-10
    • 2011-10-15
    • 2018-01-22
    • 2013-05-09
    • 2018-11-23
    相关资源
    最近更新 更多