Автоматизировать мобильное тестирование - студия Каталон

Вот подход itertools, который использует ограниченную длину collections.deque, чтобы сохранить буфер последних элементов соответствующего размера. Предполагается, что ваши подсписки не перекрываются и что ваши начальные и конечные последовательности не перекрываются.

Он работает для любой последовательности для данных, начала, конца (даже генераторы).

from collections import deque
from itertools import islice

def sublists(data, start, end):
    it = iter(data)
    start, end = deque(start), deque(end)
    while True:
        x = deque(islice(it, len(start)), len(start))
        # move forward until start is found
        while x != start:
            x.append(next(it))
        out = list(x)
        x = deque(islice(it, len(end)), len(end))
        # move forward until end is found, storing the sublist
        while x != end:
            out.append(x[0])
            x.append(next(it))
        out.extend(end)
        yield out

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]

print(list(sublists(data, startSequence, endSequence)))
# [[1, 2, 3, 99, 99, 99, 4, 5, 6], [1, 2, 3, 99, 4, 5, 6]]
0
задан Melika 5 April 2019 в 09:10
поделиться