merge_iterators#

openstef_core.utils.itertools.merge_iterators(it1: Iterator, it2: Iterator, compare: Callable[[T, T], int]) Iterator[source]#

Yield items from two sorted iterators in order defined by compare(a, b).

Parameters:
  • it1 (Iterator) – First sorted iterator

  • it2 (Iterator) – Second sorted iterator

  • compare (Callable[[T, T], int]) – Function that returns negative, zero, or positive value comparing two items (like cmp from Python 2)

Yields:

Items from both iterators in sorted order according to compare function

Example

>>> def int_compare(a: int, b: int) -> int:
...     return a - b
>>> list1 = [1, 3, 5]
>>> list2 = [2, 4, 6]
>>> list(merge_iterators(iter(list1), iter(list2), int_compare))
[1, 2, 3, 4, 5, 6]
>>> # Reverse order comparison
>>> def reverse_compare(a: int, b: int) -> int:
...     return b - a
>>> list3 = [5, 3, 1]  # sorted in descending order
>>> list4 = [6, 4, 2]  # sorted in descending order
>>> list(merge_iterators(iter(list3), iter(list4), reverse_compare))
[6, 5, 4, 3, 2, 1]
Parameters:
Return type:

Iterator[TypeVar(T)]