data_structures.arrays.pairwise_iteration

Author : Matheus F. Vesco Date : October 3, 2023

Implementation of pairwise iteration algorithms, which can be useful in many domains. Currently, there are two different implementations.

Functions

pairwise_iteration_comprehension(...)

Generate pairs of elements from an iterable with a given step size.

pairwise_iteration_tee(→ collections.abc.Iterator[tuple])

Generate pairs of elements from an iterable just like:

Module Contents

data_structures.arrays.pairwise_iteration.pairwise_iteration_comprehension(iterable: collections.abc.Iterable, step: int = 1) collections.abc.Iterator[tuple]

Generate pairs of elements from an iterable with a given step size.

This function uses list comprehensions to get the items that are step distance from each other and later the iter() conversion to create two independent list iterators (a and b) from the input iterable. The next function is used to offset the b iterator by one index, and then the two iterators are zipped together to create pairs of elements.

Args:

iterable (Iterable): The input iterable. step (int, optional): The step size for iterating through the input iterable. Defaults to 1.

Yields:

Iterator[Tuple]: An iterator that yields pairs of objects.

Examples:
>>> list(pairwise_iteration_comprehension([0, 1, 2, 3, 4, 5, 6], step=2))
[(0, 2), (2, 4), (4, 6)]
>>> list(pairwise_iteration_comprehension([0, 1, 2, 3, 4, 5, 6], step=3))
[(0, 3), (3, 6)]
>>> list(pairwise_iteration_comprehension((0, 1, 2, 3, 4), step=2))
[(0, 2), (2, 4)]
>>> python_set = pairwise_iteration_comprehension(
...     {4, 3, 2, 1, 0}, step=2)
>>> list(python_set) # sets are unordered
[(0, 2), (2, 4)]
>>> dictionary = pairwise_iteration_comprehension(
...     {'x1':4, 'y1':5, 'x2':1, 'y2':'a', 'spam':7}, step=2)
>>> list(dictionary)
[('x1', 'x2'), ('x2', 'spam')]
>>> list(pairwise_iteration_comprehension({0, 1, 2, 3, 4, 5, 6}, step=3))
[(0, 3), (3, 6)]
>>> list(pairwise_iteration_comprehension(['ATG','GCT','TGC','TAA']))
[('ATG', 'GCT'), ('GCT', 'TGC'), ('TGC', 'TAA')]
>>> list(pairwise_iteration_comprehension(['a'], step=1))
[]
data_structures.arrays.pairwise_iteration.pairwise_iteration_tee(iterable: collections.abc.Iterable) collections.abc.Iterator[tuple]

Generate pairs of elements from an iterable just like: https://docs.python.org/3/library/itertools.html#itertools.pairwise

This function uses the tee function from the itertools module to create two independent iterators (a and b) from the input iterable. The next function is used to offset the b iterator by one index, and then the two iterators are zipped together to create pairs of elements. This implementation should work with any iterable in Python.

Args:

iterable (Iterable): The input iterable.

Yields:

Iterator[Tuple]: An iterator that yields pairs of objects.

Examples:
>>> list(pairwise_iteration_tee([1, 2, 3]))
[(1, 2), (2, 3)]
>>> list(pairwise_iteration_tee((4, 3, 5)))
[(4, 3), (3, 5)]
>>> list(pairwise_iteration_tee({'x':3, 'y':1, 'z':2, 'foo':4}))
[('x', 'y'), ('y', 'z'), ('z', 'foo')]
>>> list(pairwise_iteration_tee('2345'))
[('2', '3'), ('3', '4'), ('4', '5')]
>>> list(pairwise_iteration_tee(['ATG','GCT','TGC','TAA']))
[('ATG', 'GCT'), ('GCT', 'TGC'), ('TGC', 'TAA')]
>>> list(pairwise_iteration_tee(['a']))
[]
>>> from itertools import pairwise
>>> all(list(pairwise_iteration_tee(test)) == list(pairwise(test))
... for test in (
...     [1, 2, 3],
...     (4, 3, 5),
...     {'x':3, 'y':1, 'z':2, 'foo':4},
...     '2345',
...     ['ATG','GCT','TGC','TAA'],
...     [],
... ))
True