pyiter.dedup

 1from typing import Any, Callable, Iterable, Iterator, List, Optional
 2from .transform import Transform, T
 3
 4
 5class DedupTransform(Transform[T, List[T]]):
 6    """
 7    A transform that groups consecutive duplicates from an iterable.
 8    """
 9
10    def __init__(self, iter: Iterable[T], key_selector: Optional[Callable[[T], Any]] = None):
11        super().__init__(iter)
12        self.key_selector = key_selector
13
14    def __do_iter__(self) -> Iterator[List[T]]:
15        duplicates: List[T] = []
16        seen: Optional[Any] = None
17
18        for e in self.iter:
19            k = self.key_selector(e) if self.key_selector else e
20            if k != seen:
21                if len(duplicates) > 0:
22                    yield duplicates
23                duplicates = [e]
24                seen = k
25                continue
26            duplicates.append(e)
27
28        if len(duplicates) > 0:
29            yield duplicates
class DedupTransform(pyiter.transform.Transform[~T, typing.List[~T]]):
 6class DedupTransform(Transform[T, List[T]]):
 7    """
 8    A transform that groups consecutive duplicates from an iterable.
 9    """
10
11    def __init__(self, iter: Iterable[T], key_selector: Optional[Callable[[T], Any]] = None):
12        super().__init__(iter)
13        self.key_selector = key_selector
14
15    def __do_iter__(self) -> Iterator[List[T]]:
16        duplicates: List[T] = []
17        seen: Optional[Any] = None
18
19        for e in self.iter:
20            k = self.key_selector(e) if self.key_selector else e
21            if k != seen:
22                if len(duplicates) > 0:
23                    yield duplicates
24                duplicates = [e]
25                seen = k
26                continue
27            duplicates.append(e)
28
29        if len(duplicates) > 0:
30            yield duplicates

A transform that groups consecutive duplicates from an iterable.

key_selector