From 290e40e0bf150ab889ada06e500a5835d3935da6 Mon Sep 17 00:00:00 2001 From: Scott Gasch Date: Fri, 22 Apr 2022 14:28:44 -0700 Subject: Add powerset to list_utils; improve chord parser. --- list_utils.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'list_utils.py') diff --git a/list_utils.py b/list_utils.py index 5c70df3..1141af2 100644 --- a/list_utils.py +++ b/list_utils.py @@ -6,7 +6,7 @@ import random from collections import Counter -from itertools import islice +from itertools import chain, combinations, islice from typing import Any, Iterator, List, MutableSequence, Sequence, Tuple @@ -307,6 +307,23 @@ def _binary_search(lst: Sequence[Any], target: Any, low: int, high: int) -> Tupl return (False, low) +def powerset(lst: Sequence[Any]) -> Iterator[Sequence[Any]]: + """Returns the powerset of the items in the input sequence. + + >>> for x in powerset([1, 2, 3]): + ... print(x) + () + (1,) + (2,) + (3,) + (1, 2) + (1, 3) + (2, 3) + (1, 2, 3) + """ + return chain.from_iterable(combinations(lst, r) for r in range(len(lst) + 1)) + + if __name__ == '__main__': import doctest -- cgit v1.3