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]
。
有人可以告诉我如何解决它吗?感谢。
答案 0 :(得分:0)
您返回的值大于以下值。您还需要检查它们是否比以前更大。
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]
中找不到峰值。希望,这就是你想要的。