在列表中查找特定排序序列的实例

Finding instances of specifically ordered sequence in list

假设我们有一个整数列表,如下所示:

ls = [1,5,10,11,12,20,26,31,32,33,34]

也就是说,在上面的例子中我们有3个这样的事件,它们的索引是:

这应该有效:

matching = []

for i in range(len(ls)):
    sub_ls = ls[i:i+3]
    deltas = [nb-sub_ls[_index] for _index, nb in enumerate(sub_ls[1:])]
    if deltas == [1, 1]:
        matching.append((i, i+1, i+2))

输出:

[(2, 3, 4), (7, 8, 9), (8, 9, 10)]
def check(ls):
    for i in range(len(ls)-1):
        if ls[i+1] != ls[i] + 1:
            return False
    return True

result = [[i+j for j in range(3)] for i in range(len(ls)-2) if check(ls[i:i+3])]

备选答案与列表理解!

我想到的最简单的解决方案是遍历 3 个元素子集中的列表并检查条件。

n = 3 #Number of elements in subset of list, in your question it's 3
x = [1,5,10,11,12,20,26,31,32,33,34]
for i in range(len(x)-n+1):
    a, b, c = x[i:i+n]
    if b-a == c-b == 1:
        print('indices->',list(range(i, i+n)), 'values->', x[i: i+n])

输出:

indices-> [2, 3, 4] values-> [10, 11, 12]
indices-> [7, 8, 9] values-> [31, 32, 33]
indices-> [8, 9, 10] values-> [32, 33, 34]