DrawSet: A set with an efficient random draw
- class epydemic.DrawSet(including=None, excluding=None)
A set re-implementation.
This class provides a re-implementation of sets that also provides an efficient (\(O(\log N)\)) method for drawing an element at random.
We implement only those parts of the set API that we need: perhaps ought to add the rest, for future-proofing.
- Parameters:
including (
Iterator[Union[Any,Tuple[Any,Any]]]) – (optional) iterator of elements to addexcluding (
Iterator[Union[Any,Tuple[Any,Any]]]) – (optional) elements to exclude from the initialisation
The set interface
- DrawSet.add(e)
Add an element to the set. This is a no-op if the element is already in the set.
- Parameters:
e (
Union[Any,Tuple[Any,Any]]) – the element to add
- DrawSet.__contains__(e)
Check whether the given element is a member of the set.
- Parameters:
e (
Union[Any,Tuple[Any,Any]]) – the element- Return type:
bool- Returns:
True if the element is in the set
- DrawSet.empty()
Test if the set is empty.
- Return type:
bool- Returns:
True if the set is empty
- DrawSet.__len__()
Return the size of the set.
- Return type:
int- Returns:
the size of the set
- DrawSet.__iter__()
Return an iterator that returns elements in order.
- Return type:
Iterator[Union[Any,Tuple[Any,Any]]]- Returns:
an iterator
Random drawing
The point of this class is to provide a way of drawing a random element efficiently, which isn’t possible using the standard Python set interface.
- DrawSet.draw()
Draw an element from the set at random.
- Return type:
Union[Any,Tuple[Any,Any]]- Returns:
a random element, or none if the set is empty