我有一个只包含正整数的列表:
my_list = [1, 2, 4, 7, 9, 10, 15, 16]
列表已排序。
检查列表是否包含任何序列x
序列号的最“pythonic”方法是什么?无论序列是从列表的开头开始,还是在列表的末尾结束都无关紧要 - 只要它在列表中,它就应该返回true。例如,如果我想检查以下列表是否包含4个数字序列:
my_list = [1, 3, 4, 5, 6, 8, 10]
由于[3, 4, 5, 6]
我已经看到多个关于“在列表中查找数字序列”的StackOverflow问题,但是它们都没有涉及仅在列表的部分中查找序列。 (我发现只有在目标是检查整个列表是否是连续的时才有用。)
答案 0 :(得分:3)
这是一个班轮:
def has_sequence(L, seq_len):
return any(list(L[i:i+seq_len]) == list(range(L[i],L[i]+seq_len))
for i in range(len(L)-seq_len+1))
答案 1 :(得分:2)
def findRun(L, n):
runlen = 0
for i in range(1, len(L)):
if L[i] == L[i-1]+1:
runlen += 1
else:
runlen = 0
if runlen == n-1:
print("Found a run starting at", i-n+1)
输出:
In [451]: L = [1, 3, 4, 5, 6, 8, 10]
In [452]: findRun(L, 4)
Found a run starting at 1
答案 2 :(得分:2)
你可以试试这个: 在使用差异对它们进行分组后,您只需检查是否有任何组包含您的首选连续序列数(在本例中为4)。
from itertools import groupby
from operator import itemgetter
my_list = [1, 3, 4, 5, 6, 8, 10]
check = False
for key, group in groupby(enumerate(my_list), lambda (i, val): i - val):
g = map(itemgetter(1), group)
if len(g) == 4:
check = True
print(check)
真
我希望这就是你要找的。 p>