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.1, 3.2, 3.3, 3.4, 3.5, PyPy & PyPy3.
Python 3.1 and 3.2 are unsupported by coverage so they are not included in Travis CI.
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:
2016 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.8.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | b74f5163638dc4b485b456adf104db15a0c84f71afbed53e078fb9f2ab706060 |
|
MD5 | b4b4a6471f10152e21aa029dd9a78138 |
|
BLAKE2b-256 | fa665ac2d0132b456c4568247032e79a2d927a4ae1dc5ba785be41400461e503 |
Hashes for collections_extended-0.8.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4c02292237e441fb15a66d107db13f270312c6d64957811712e0a1116e6fc480 |
|
MD5 | 3432d1d736ef4462a4aaa8c9c8c02b1f |
|
BLAKE2b-256 | 50e34f5c55f648d68d90fabbb5a9e026445172dfe5b1c0acd565cc2e137a47d2 |