我建议你使用groupby https://docs.python.org/3/library/itertools.html#itertools.groupby将连续的相等值分组,然后为每个组存储第一个位置,例如[1, 2, 2, 2, 1]
它在元组列表之后创建以下列表[(1, 0), (2, 1), (1, 4)]
,将所有内容放在一起:
from itertools import groupby
def peaks(data):
start = 0
sequence = []
for key, group in groupby(data):
sequence.append((key, start))
start += sum(1 for _ in group)
for (b, bi), (m, mi), (a, ai) in zip(sequence, sequence[1:], sequence[2:]):
if b < m and a < m:
yield m, mi
print(list(peaks([0, 1, 2, 5, 1, 0])))
print(list(peaks([1, 2, 2, 2, 1])))
print(list(peaks([1, 2, 2, 2, 3])))
Output
[(5, 3)]
[(2, 1)]
[]