# Orderly Set 5.2.3
Orderly Set is a package containing multiple implementations of Ordered Set.
## OrderlySet
This implementation keeps the order in all set operations except set difference operations.
As a result, it can do set difference operations much faster than other implementations. Still 2X slower than of Python's built-in set.
## StableSet
A StableSet is a mutable set that remembers its insertion order.
Featuring: Fast O(1) insertion, deletion, iteration and membership testing.
But slow O(N) Index Lookup.
## StableSetEq
Same as StableSet but the order of items doesn't matter for equality comparisons.
## OrderedSet
An OrderedSet is a mutable data structure that is a hybrid of a list and a set.
It remembers its insertion order so that every entry has an index that can be looked up.
Featuring: O(1) Index lookup, insertion, iteration and membership testing.
But slow O(N) Deletion.
## SortedSet
SortedSet is basically set but when printed, turned into string, or iterated over, returns the items in alphabetical order.
# Installation
`pip install orderly-set`
# Usage examples
An OrderedSet is created and used like a set:
>>> from orderly_set import OrderedSet
>>> letters = OrderedSet('abracadabra')
>>> letters
OrderedSet(['a', 'b', 'r', 'c', 'd'])
>>> 'r' in letters
True
It is efficient to find the index of an entry in an OrderedSet, or find an
entry by its index. To help with this use case, the `.add()` method returns
the index of the added item, whether it was already in the set or not.
>>> letters.index('r')
2
>>> letters[2]
'r'
>>> letters.add('r')
2
>>> letters.add('x')
5
OrderedSets implement the union (`|`), intersection (`&`), and difference (`-`)
operators like sets do.
>>> letters |= OrderedSet('shazam')
>>> letters
OrderedSet(['a', 'b', 'r', 'c', 'd', 'x', 's', 'h', 'z', 'm'])
>>> letters & set('aeiou')
OrderedSet(['a'])
>>> letters -= 'abcd'
>>> letters
OrderedSet(['r', 'x', 's', 'h', 'z', 'm'])
The `__getitem__()` and `index()` methods have been extended to accept any
iterable except a string, returning a list, to perform NumPy-like "fancy
indexing".
>>> letters = OrderedSet('abracadabra')
>>> letters[[0, 2, 3]]
['a', 'r', 'c']
>>> letters.index(['a', 'r', 'c'])
[0, 2, 3]
OrderedSet implements `__getstate__` and `__setstate__` so it can be pickled,
and implements the abstract base classes `collections.MutableSet` and
`collections.Sequence`.
OrderedSet can be used as a generic collection type, similar to the collections
in the `typing` module like List, Dict, and Set. For example, you can annotate
a variable as having the type `OrderedSet[str]` or `OrderedSet[Tuple[int,
str]]`.
# Authors
Please check the [Authors](AUTHORS.md) file.
# Comparisons
```
-- initialize a set --
Using Python dict time: 4.13
set time: 2.98
ordered_set.OrderedSet time: 15.77
orderly_set.OrderedSet time: 15.25
StableSet time: 4.78
OrderlySet time: 4.38
SortedSet time: 3.09
-- update a set --
Using Python dict: 6.77
set time: 2.46
ordered_set.OrderedSet time: 10.17
orderly_set.OrderedSet time: 10.06
StableSet time: 7.16
OrderlySet time: 6.77
SortedSet time: 2.46
-- update a set and get item --
ordered_set.OrderedSet time: 29.98
orderly_set.OrderedSet time: 29.57
StableSet time: 14.31
OrderlySet time: 14.23
SortedSet time: 9.03
-- set symmetric difference (xor) --
set time: 5.368663903005654
ordered_set.OrderedSet time: 39.25
orderly_set.OrderedSet time: 80.31
StableSet time: 42.81
OrderlySet time: 11.44
SortedSet time: 3.87
-- set difference (-) --
set time: 3.7398674299911363
ordered_set.OrderedSet time: 22.39
orderly_set.OrderedSet time: 38.00
StableSet time: 22.30
OrderlySet time: 8.92
SortedSet time: 3.03
```
Despite what you see in the benchmarks, in DeepDiff OrderlySet performed better than SortedSet.
A StableSet is a mutable set that remembers its insertion order.
Featuring: Fast O(1) insertion, deletion, iteration and membership testing.
But slow O(N) Index Lookup.
An OrderedSet is a mutable data structure that is a hybrid of a list and a set.
It remembers its insertion order so that every entry has an index that can be looked up.
Featuring: O(1) Index lookup, insertion, iteration and membership testing.
But slow O(N) Deletion.
Both have similar interfaces but differ in respect of their implementation and performance.
The original implementation of OrderedSet was a [recipe posted to ActiveState
Recipes][recipe] by Raymond Hettiger, released under the MIT license.
[recipe]: https://code.activestate.com/recipes/576694-orderedset/
Hettiger's implementation kept its content in a doubly-linked list referenced by a
dict. As a result, looking up an item by its index was an O(N) operation, while
deletion was O(1).
This version of OrderedSet makes different trade-offs for the sake of efficient lookups.
Its content is a standard Python list instead of a doubly-linked list. This
provides O(1) lookups by index at the expense of O(N) deletion, as well as
slightly faster iteration.
Raw data
{
"_id": null,
"home_page": "https://github.com/seperman/orderly-set",
"name": "orderly-set",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": null,
"author": "Seperman",
"author_email": "sep@zepworks.com",
"download_url": "https://files.pythonhosted.org/packages/5d/9e/8fdcb9ab1b6983cc7c185a4ddafc27518118bd80e9ff2f30aba83636af37/orderly_set-5.2.3.tar.gz",
"platform": null,
"description": "# Orderly Set 5.2.3\n\nOrderly Set is a package containing multiple implementations of Ordered Set.\n\n\n## OrderlySet\n\nThis implementation keeps the order in all set operations except set difference operations.\nAs a result, it can do set difference operations much faster than other implementations. Still 2X slower than of Python's built-in set.\n\n\n## StableSet\n\nA StableSet is a mutable set that remembers its insertion order.\nFeaturing: Fast O(1) insertion, deletion, iteration and membership testing.\nBut slow O(N) Index Lookup.\n\n## StableSetEq\n\nSame as StableSet but the order of items doesn't matter for equality comparisons.\n\n## OrderedSet\n\nAn OrderedSet is a mutable data structure that is a hybrid of a list and a set.\nIt remembers its insertion order so that every entry has an index that can be looked up. \nFeaturing: O(1) Index lookup, insertion, iteration and membership testing.\nBut slow O(N) Deletion.\n\n\n## SortedSet\n\nSortedSet is basically set but when printed, turned into string, or iterated over, returns the items in alphabetical order.\n\n# Installation\n\n`pip install orderly-set`\n\n# Usage examples\n\nAn OrderedSet is created and used like a set:\n\n >>> from orderly_set import OrderedSet\n\n >>> letters = OrderedSet('abracadabra')\n\n >>> letters\n OrderedSet(['a', 'b', 'r', 'c', 'd'])\n\n >>> 'r' in letters\n True\n\nIt is efficient to find the index of an entry in an OrderedSet, or find an\nentry by its index. To help with this use case, the `.add()` method returns\nthe index of the added item, whether it was already in the set or not.\n\n >>> letters.index('r')\n 2\n\n >>> letters[2]\n 'r'\n\n >>> letters.add('r')\n 2\n\n >>> letters.add('x')\n 5\n\nOrderedSets implement the union (`|`), intersection (`&`), and difference (`-`)\noperators like sets do.\n\n >>> letters |= OrderedSet('shazam')\n\n >>> letters\n OrderedSet(['a', 'b', 'r', 'c', 'd', 'x', 's', 'h', 'z', 'm'])\n\n >>> letters & set('aeiou')\n OrderedSet(['a'])\n\n >>> letters -= 'abcd'\n\n >>> letters\n OrderedSet(['r', 'x', 's', 'h', 'z', 'm'])\n\nThe `__getitem__()` and `index()` methods have been extended to accept any\niterable except a string, returning a list, to perform NumPy-like \"fancy\nindexing\".\n\n >>> letters = OrderedSet('abracadabra')\n\n >>> letters[[0, 2, 3]]\n ['a', 'r', 'c']\n\n >>> letters.index(['a', 'r', 'c'])\n [0, 2, 3]\n\nOrderedSet implements `__getstate__` and `__setstate__` so it can be pickled,\nand implements the abstract base classes `collections.MutableSet` and\n`collections.Sequence`.\n\nOrderedSet can be used as a generic collection type, similar to the collections\nin the `typing` module like List, Dict, and Set. For example, you can annotate\na variable as having the type `OrderedSet[str]` or `OrderedSet[Tuple[int,\nstr]]`.\n\n\n# Authors\n\nPlease check the [Authors](AUTHORS.md) file.\n\n# Comparisons\n\n```\n-- initialize a set --\nUsing Python dict time: 4.13\nset time: 2.98\nordered_set.OrderedSet time: 15.77\norderly_set.OrderedSet time: 15.25\nStableSet time: 4.78\nOrderlySet time: 4.38\nSortedSet time: 3.09\n\n-- update a set --\nUsing Python dict: 6.77\nset time: 2.46\nordered_set.OrderedSet time: 10.17\norderly_set.OrderedSet time: 10.06\nStableSet time: 7.16\nOrderlySet time: 6.77\nSortedSet time: 2.46\n\n-- update a set and get item --\nordered_set.OrderedSet time: 29.98\norderly_set.OrderedSet time: 29.57\nStableSet time: 14.31\nOrderlySet time: 14.23\nSortedSet time: 9.03\n\n-- set symmetric difference (xor) --\nset time: 5.368663903005654\nordered_set.OrderedSet time: 39.25\norderly_set.OrderedSet time: 80.31\nStableSet time: 42.81\nOrderlySet time: 11.44\nSortedSet time: 3.87\n\n-- set difference (-) --\nset time: 3.7398674299911363\nordered_set.OrderedSet time: 22.39\norderly_set.OrderedSet time: 38.00\nStableSet time: 22.30\nOrderlySet time: 8.92\nSortedSet time: 3.03\n```\n\nDespite what you see in the benchmarks, in DeepDiff OrderlySet performed better than SortedSet.\n\n\nA StableSet is a mutable set that remembers its insertion order.\nFeaturing: Fast O(1) insertion, deletion, iteration and membership testing.\nBut slow O(N) Index Lookup.\n\nAn OrderedSet is a mutable data structure that is a hybrid of a list and a set.\nIt remembers its insertion order so that every entry has an index that can be looked up. \nFeaturing: O(1) Index lookup, insertion, iteration and membership testing.\nBut slow O(N) Deletion.\n\nBoth have similar interfaces but differ in respect of their implementation and performance.\n\nThe original implementation of OrderedSet was a [recipe posted to ActiveState\nRecipes][recipe] by Raymond Hettiger, released under the MIT license.\n\n[recipe]: https://code.activestate.com/recipes/576694-orderedset/\n\nHettiger's implementation kept its content in a doubly-linked list referenced by a\ndict. As a result, looking up an item by its index was an O(N) operation, while\ndeletion was O(1).\n\nThis version of OrderedSet makes different trade-offs for the sake of efficient lookups. \nIts content is a standard Python list instead of a doubly-linked list. This\nprovides O(1) lookups by index at the expense of O(N) deletion, as well as\nslightly faster iteration.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Orderly set",
"version": "5.2.3",
"project_urls": {
"Download": "https://github.com/seperman/orderly-set/tarball/master",
"Homepage": "https://github.com/seperman/orderly-set"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "ccbba3a4eab8430f14c7d1476f9db261d32654cb3d1794c0266a46f6574e1190",
"md5": "983ac15b7a550e53e1b7ab91d178686e",
"sha256": "d357cedcf67f4ebff0d4cbd5b0997e98eeb65dd24fdf5c990a501ae9e82c7d34"
},
"downloads": -1,
"filename": "orderly_set-5.2.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "983ac15b7a550e53e1b7ab91d178686e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 12024,
"upload_time": "2024-09-11T05:31:51",
"upload_time_iso_8601": "2024-09-11T05:31:51.109358Z",
"url": "https://files.pythonhosted.org/packages/cc/bb/a3a4eab8430f14c7d1476f9db261d32654cb3d1794c0266a46f6574e1190/orderly_set-5.2.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5d9e8fdcb9ab1b6983cc7c185a4ddafc27518118bd80e9ff2f30aba83636af37",
"md5": "bff12b864c96bebdf185dfb9ae07a833",
"sha256": "571ed97c5a5fca7ddeb6b2d26c19aca896b0ed91f334d9c109edd2f265fb3017"
},
"downloads": -1,
"filename": "orderly_set-5.2.3.tar.gz",
"has_sig": false,
"md5_digest": "bff12b864c96bebdf185dfb9ae07a833",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 19698,
"upload_time": "2024-09-11T05:31:52",
"upload_time_iso_8601": "2024-09-11T05:31:52.075652Z",
"url": "https://files.pythonhosted.org/packages/5d/9e/8fdcb9ab1b6983cc7c185a4ddafc27518118bd80e9ff2f30aba83636af37/orderly_set-5.2.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-11 05:31:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "seperman",
"github_project": "orderly-set",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"tox": true,
"lcname": "orderly-set"
}