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