summaryrefslogtreecommitdiff
path: root/list_utils.py
diff options
context:
space:
mode:
authorScott Gasch <[email protected]>2022-04-22 14:28:44 -0700
committerScott Gasch <[email protected]>2022-04-22 14:28:44 -0700
commit290e40e0bf150ab889ada06e500a5835d3935da6 (patch)
tree6eff266f7ad9a6c62c682317a2f75746c19c6193 /list_utils.py
parent711a9fd699f7c724f0aab7c1c43511cfbf7b2281 (diff)
Add powerset to list_utils; improve chord parser.
Diffstat (limited to 'list_utils.py')
-rw-r--r--list_utils.py19
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