diff options
| author | Scott Gasch <[email protected]> | 2022-04-22 14:28:44 -0700 |
|---|---|---|
| committer | Scott Gasch <[email protected]> | 2022-04-22 14:28:44 -0700 |
| commit | 290e40e0bf150ab889ada06e500a5835d3935da6 (patch) | |
| tree | 6eff266f7ad9a6c62c682317a2f75746c19c6193 /list_utils.py | |
| parent | 711a9fd699f7c724f0aab7c1c43511cfbf7b2281 (diff) | |
Add powerset to list_utils; improve chord parser.
Diffstat (limited to 'list_utils.py')
| -rw-r--r-- | list_utils.py | 19 |
1 files changed, 18 insertions, 1 deletions
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 |
