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

标签 python regex list search

我正在尝试通过使用开始和结束模式从 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]

有什么办法可以实现吗?

最佳答案

这是一个更通用的解决方案,它不需要列表是可切片的,因此您可以将它用于其他可迭代对象,例如生成器。

我们保持 deque 大小为 start 序列,直到我们遇到它。然后我们将这些值添加到列表中,并继续迭代序列。正如我们所做的那样,我们保持 deque 结束序列的大小,直到我们看到它,同时将元素添加到我们保持的列表中。如果遇到结束序列,我们将yield 该列表并设置deque 以扫描下一个开始序列。

from collections import deque

def gen(l, start, stop):
    start_deque = deque(start)
    end_deque = deque(stop)
    curr_deque = deque(maxlen=len(start))
    it = iter(l)
    for c in it:
        curr_deque.append(c)
        if curr_deque == start_deque:
            potential = list(curr_deque)
            curr_deque = deque(maxlen=len(stop))
            for c in it:
                potential.append(c)
                curr_deque.append(c)
                if curr_deque == end_deque:
                    yield potential
                    curr_deque = deque(maxlen=len(start))
                    break

print(list(gen([99, 99, 1, 2, 3, 99, 99, 99, 4, 5, 6, 99, 99, 1, 2, 3, 99, 4, 5, 6, 99], [1,2,3], [4,5,6])))

# [[1, 2, 3, 99, 99, 99, 4, 5, 6], [1, 2, 3, 99, 4, 5, 6]]

关于Python:使用模块或正则表达式从列表中提取列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51327792/

相关文章:

python - Tensorflow 图像分类脚本

regex - 在 Swift 3 中搜索正则表达式

r - 标准化电话号码数据

javascript - 正则表达式检测前导零并检查 0 到 12 位数字的长度

r - 拆分列表每 n 个元素和 cbind,然后 rbind 切片

python - 通过套接字在C++和python之间交换固定 float 组

python - 在 python 中创建类似 shell 的环境的正确方法是什么?

python - list.append() 不保留打乱的值

python - 如何检查一个列表中的所有项目是否都在 python 的第二个列表中?

python - 根据没有名称值的列过滤数据框