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
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.