擅长:python、mysql、java
<p>正如raymondhettinger在他的回答中指出的,<a href="http://docs.python.org/2/library/itertools.html#itertools.groupby" rel="nofollow">^{<cd1>}</a>使检查连续值更容易。如果还枚举列表,则可以保留相应的索引并将其添加到字典中(我使用<a href="http://docs.python.org/2/library/collections.html#collections.defaultdict" rel="nofollow">^{<cd2>}</a>使函数尽可能短):</p>
<pre><code>from itertools import groupby
from operator import itemgetter
from collections import defaultdict
li = [-1, -1, 2, 2, -1, 1, 1, 1, 1, 1, -1, -1]
def sub_seq(li, n):
res = defaultdict(list)
for k, g in groupby(enumerate(li), itemgetter(1)):
l = list(map(itemgetter(0), g))
if n <= len(l): res[k] += l[0:len(l)-n+1]
return res
for i in (5,4,3,2):
print i, sub_seq(li,i)
</code></pre>
<p>哪个打印:</p>
^{pr2}$