Python:使用模块或正则表达式从列表中提取列表

bac*_*nLX 6 python regex search list

我试图通过使用开始和结束模式从Python2.7中提取一个更大的整数列表中的列表/子列表.我想用一个函数来做,但我找不到一个库,算法或正则表达式来解决这个问题.

def myFunctionForSublists(data, startSequence, endSequence):
    # ... todo

data = [99, 99, 1, 2, 3, 99, 99, 99, 4, 5, 6, 99, 99, 1, 2, 3, 99, 4, 5, 6, 99]

startSequence = [1,2,3]
endSequence = [4,5,6]

sublists = myFunctionForSublists(data, startSequence, endSequence)

print sublists[0] # [1, 2, 3, 99, 99, 99, 4, 5, 6]
print sublists[1] # [1, 2, 3, 99, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

我有什么想法可以实现它吗?

tob*_*s_k 0

只需迭代列表中的所有索引并将切片分别与startSequence或进行比较endSequence。假设子列表不应该重叠,您可以对两个循环使用相同的迭代器。

def myFunctionForSublists(data, startSequence, endSequence):
    positions = iter(range(len(data)))
    for start in positions:
        if data[start:start+len(startSequence)] == startSequence:
            for end in positions:
                if data[end:end+len(endSequence)] == endSequence:
                    yield data[start:end+len(endSequence)]
                    break
Run Code Online (Sandbox Code Playgroud)

这样,start循环将从循环离开的地方继续end。如果它们可以重叠,请使用两个单独的迭代器进行循环,即for start in range(len(data)):for end in range(start+1, len(data)):