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:
2017 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-0.9.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab6951f353a3118daa745d21342f05cb7b9b731f6894cb7882e8655c2508602f |
|
MD5 | b4e99de457e66dfe0b12b37e0ae289b1 |
|
BLAKE2b-256 | b672d8dda6c0e9fbb0468ff30d1f1592948a4383229208a5fc48ce7f68c51f38 |
Hashes for collections_extended-0.9.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 45fad08f239f24890368852954559631bae659b79cc3494eaf1561f83c5fd42e |
|
MD5 | 7d0b0c109cb74292e191a472a2a5e6eb |
|
BLAKE2b-256 | f2f5936fa66a1112adb374d0949aff33b9a4d148da8271fc6a26153e1e26453d |