merge¶
- class iteration_utilities.merge(*iterables, key=None, reverse=False)¶
Merge several sorted iterables into one.
- Parameters:
- iterablesiterable
Any amount of already sorted iterable objects.
- keycallable or None, optional
If not given compare the item themselves otherwise compare the result of
key(item), like the key parameter forsorted().- reverse
bool, optional If
Truethen merge in decreasing order instead of increasing order. Default isFalse.
- Returns:
- mergedgenerator
The merged iterables as generator.
See also
heapq.mergeEquivalent since Python 3.5 but in most cases slower! Earlier Python versions did not support the key or reverse argument.
sortedsorted(itertools.chain(*iterables))supports the same options and can be faster.
Examples
To merge multiple sorted iterables:
>>> from iteration_utilities import merge >>> list(merge([1, 3, 5, 7, 9], [2, 4, 6, 8, 10])) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
It’s stable and allows a key function:
>>> seq1 = [(1, 3), (3, 3)] >>> seq2 = [(-1, 3), (-3, 3)] >>> list(merge(seq1, seq2, key=lambda x: abs(x[0]))) [(1, 3), (-1, 3), (3, 3), (-3, 3)]
Also possible to reverse (biggest to smallest order) the merge:
>>> list(merge([5,1,-8], [10, 2, 1, 0], reverse=True)) [10, 5, 2, 1, 1, 0, -8]
But also more than two iterables:
>>> list(merge([1, 10, 11], [2, 9], [3, 8], [4, 7], [5, 6], range(10))) [0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 11]
However if the iterables are not sorted the result will be unsorted (partially sorted):
>>> list(merge(range(10), [6,1,3,2,6,1,6])) [0, 1, 2, 3, 4, 5, 6, 6, 1, 3, 2, 6, 1, 6, 7, 8, 9]
- __length_hint__()¶
Tries to estimate for the length of the instance (returns
0if an estimation is not possible).
- key¶
(callable or None) The key function used by merge (readonly).
Added in version 0.6.