projects
/
python_utils.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
More cleanup.
[python_utils.git]
/
list_utils.py
diff --git
a/list_utils.py
b/list_utils.py
index b877e381041d32564789232e1bb7329cc04503e6..91af8f9eb924fb7e7e04932d58a1bcb6eded0690 100644
(file)
--- a/
list_utils.py
+++ b/
list_utils.py
@@
-1,8
+1,10
@@
#!/usr/bin/env python3
#!/usr/bin/env python3
+"""Some useful(?) utilities for dealing with Lists."""
+
from collections import Counter
from itertools import islice
from collections import Counter
from itertools import islice
-from typing import Any, Iterator, List,
Mapping,
Sequence, Tuple
+from typing import Any, Iterator, List, Sequence, Tuple
def shard(lst: List[Any], size: int) -> Iterator[Any]:
def shard(lst: List[Any], size: int) -> Iterator[Any]:
@@
-65,7
+67,7
@@
def remove_list_if_one_element(lst: List[Any]) -> Any:
return lst
return lst
-def population_counts(lst:
List[Any]) -> Mapping[Any, int]
:
+def population_counts(lst:
Sequence[Any]) -> Counter
:
"""
Return a population count mapping for the list (i.e. the keys are
list items and the values are the number of occurrances of that
"""
Return a population count mapping for the list (i.e. the keys are
list items and the values are the number of occurrances of that
@@
-200,9
+202,9
@@
def ngrams(lst: Sequence[Any], n):
yield lst[i : i + n]
yield lst[i : i + n]
-def permute(seq:
Sequence[Any]
):
+def permute(seq:
str
):
"""
"""
- Returns all permutations of a sequence; takes O(N
^2
) time.
+ Returns all permutations of a sequence; takes O(N
!
) time.
>>> for x in permute('cat'):
... print(x)
>>> for x in permute('cat'):
... print(x)
@@
-217,11
+219,12
@@
def permute(seq: Sequence[Any]):
yield from _permute(seq, "")
yield from _permute(seq, "")
-def _permute(seq: Sequence[Any], path):
- if len(seq) == 0:
+def _permute(seq: str, path: str):
+ seq_len = len(seq)
+ if seq_len == 0:
yield path
yield path
- for i in range(
len(seq)
):
+ for i in range(
seq_len
):
car = seq[i]
left = seq[0:i]
right = seq[i + 1 :]
car = seq[i]
left = seq[0:i]
right = seq[i + 1 :]
@@
-264,9
+267,7
@@
def binary_search(lst: Sequence[Any], target: Any, *, sanity_check=False) -> Tup
return _binary_search(lst, target, 0, len(lst) - 1)
return _binary_search(lst, target, 0, len(lst) - 1)
-def _binary_search(
- lst: Sequence[Any], target: Any, low: int, high: int
-) -> Tuple[bool, int]:
+def _binary_search(lst: Sequence[Any], target: Any, low: int, high: int) -> Tuple[bool, int]:
if high >= low:
mid = (high + low) // 2
if lst[mid] == target:
if high >= low:
mid = (high + low) // 2
if lst[mid] == target: