Extra Python Collections - bags (multisets) and setlists (ordered sets)
Project description
Documentation: http://collections-extended.lenzm.net/
GitHub: https://github.com/mlenzen/collections-extended
PyPI: https://pypi.python.org/pypi/collections-extended
Overview
collections_extended is a Python module providing a bag class, AKA multiset, a setlist class, which is a unique list or ordered set, a bijection class and RangeMap which is a mapping from ranges to values. There are also frozen (hashable) varieties of bags and setlists.
Tested against Python 2.6, 2.7, 3.3, 3.4, 3.5, 3.6, PyPy & PyPy3.
Getting Started
>>> from collections_extended import bag, setlist, bijection, RangeMap
>>> from datetime import date
>>> b = bag('abracadabra')
>>> b.count('a')
5
>>> b.remove('a')
>>> b.count('a')
4
>>> 'a' in b
True
>>> b.count('d')
1
>>> b.remove('d')
>>> b.count('d')
0
>>> 'd' in b
False
>>> sl = setlist('abracadabra')
>>> sl
setlist(('a', 'b', 'r', 'c', 'd'))
>>> sl[3]
'c'
>>> sl[-1]
'd'
>>> 'r' in sl # testing for inclusion is fast
True
>>> sl.index('d') # so is finding the index of an element
4
>>> sl.insert(1, 'd') # inserting an element already in raises a ValueError
Traceback (most recent call last):
...
raise ValueError
ValueError
>>> sl.index('d')
4
>>> bij = bijection({'a': 1, 'b': 2, 'c': 3})
>>> bij.inverse[2]
'b'
>>> bij['a'] = 2
>>> bij == bijection({'a': 2, 'c': 3})
True
>>> bij.inverse[1] = 'a'
>>> bij == bijection({'a': 1, 'c': 3})
True
>>> us_presidents = RangeMap()
>>> us_presidents[date(1993, 1, 20):date(2001, 1, 20)] = 'Bill Clinton'
>>> us_presidents[date(2001, 1, 20):date(2009, 1, 20)] = 'George W. Bush'
>>> us_presidents[date(2009, 1, 20):] = 'Barack Obama'
>>> us_presidents[date(1995, 5, 10)]
'Bill Clinton'
>>> us_presidents[date(2001, 1, 20)]
'George W. Bush'
>>> us_presidents[date(2021, 3, 1)]
'Barack Obama'
>>> us_presidents[date(2017, 1, 20):] = 'Someone New'
>>> us_presidents[date(2021, 3, 1)]
'Someone New'
Installation
pip install collections-extended
Usage
from collections_extended import bag, frozenbag, setlist, frozensetlist, bijection
Classes
There are six new classes provided:
Bags
- bag
This is a bag AKA multiset.
- frozenbag
This is a frozen (hashable) version of a bag.
Setlists
- setlist
An ordered set or a list of unique elements depending on how you look at it.
- frozensetlist
This is a frozen (hashable) version of a setlist.
Mappings
- bijection
A one-to-one mapping.
- RangeMap
A mapping from ranges (of numbers/dates/etc)
- Author:
Michael Lenzen
- Copyright:
2018 Michael Lenzen
- License:
Apache License, Version 2.0
- Project Homepage:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for collections-extended-1.0.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 009464f58768122ee8858602ef1bb5461eafe70187e1595d7a2089661f2a3f88 |
|
MD5 | cc58a2c0dcf86d246258ed9fb1a1b40b |
|
BLAKE2b-256 | af51dac3a3d3e5288f8049fa1094f076788e2eb91593ae48279dd85abf6fae38 |
Hashes for collections_extended-1.0.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 81fe2913ef160d297ad134df3ea3134e05b3cd7f5ad014062c39c6090225a4ff |
|
MD5 | 1c29fbbb98fd5b571fc31c2217279d28 |
|
BLAKE2b-256 | 10c74517dca2b4529e3994321d0f339a09ccec0e30bfd476c5a9066b5a062d34 |