擅长:python、mysql、java
<p>我建议您使用<a href="https://docs.python.org/3/library/itertools.html#itertools.groupby" rel="nofollow noreferrer">groupby</a>对连续相等的值进行分组,然后为每个组存储第一个位置,例如<code>[1, 2, 2, 2, 1]</code>它创建了以下列表,下面是元组列表<code>[(1, 0), (2, 1), (1, 4)]</code>,将所有这些放在一起:</p>
<pre><code>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])))
</code></pre>
<p><strong>输出</strong></p>
^{pr2}$