, - ,
>>> def get_item_with_context(predicate, iterable, items_before = 0, items_after = 0):
queue = collections.deque(maxlen=items_before+1)
found = False
for e in iterable:
queue.append(e)
if not found and predicate(e):
queue = collections.deque(queue,items_before+1+items_after)
found = True
if found:
if not items_after : break
items_after-=1
if not found:
queue.clear()
return list(queue)
>>> get_item_with_context(lambda x: x == 0, [1,2,3,4,5,6],items_before = 2, items_after = 1)
[]
>>> get_item_with_context(lambda x: x == 4, [1,2,3,4,5,6],items_before = 2, items_after = 1)
[2, 3, 4, 5]
>>> get_item_with_context(lambda x: x == 1, [1,2,3,4,5,6],items_before = 2, items_after = 1)
[1, 2]
>>> get_item_with_context(lambda x: x == 6, [1,2,3,4,5,6],items_before = 2, items_after = 1)
[4, 5, 6]
>>> get_item_with_context(lambda x: x == 4, [1,2,3,4,5,6],items_before = 20, items_after = 10)
[1, 2, 3, 4, 5, 6]