count consecutive elements
Peter Otten
__peter__ at web.de
Sun Jan 17 12:50:17 EST 2021
On 17/01/2021 02:15, Dan Stromberg wrote:
IMO a good set of tests is much more important than type annotations ;)
> def get_longest(string: str) -> typing.Tuple[int, typing.List[str]]:
> """Get the longest run of a single consecutive character."""
May I ask why you artificially limit the signature to str?
If there were a signature, shouldn't it be something like
Iterable[E] --> Tuple[int, List[E]]
where E may be anything that has an equality operation?
As someone who has not yet looked seriously into typing: is there a way
to spell this?
> if not string:
> return (0, [])
> grouped = itertools.groupby(string)
> grouped_with_lengths = [(len(list(value)), key) for key, value in
> grouped]
> max_count_and_letter = max(grouped_with_lengths)
> max_count = max_count_and_letter[0]
> result = (max_count, sorted(list_ for count, list_ in
> grouped_with_lengths if count == max_count))
> return result
If you want to dabble some more here's a test case you might strive for
your function to pass:
"""
>>> class A:
... def __init__(self, x):
... self.x = x
... def __eq__(self, other):
... return self.x == other.x
... def __repr__(self):
... return self.x
>>> get_longest(map(A, "aaabbcccdaa"))
(3, [a, c])
"""
More information about the Python-list
mailing list