Skip to main content

Singly linked lists with incremental instantiation of iterators

Project description

Package Description

CI Documentation Status

A Python library to provide "chains", which are Lisp-like singly linked lists that support the lazy expansion of iterators. For example, we can construct a Chain of three characters from the iterable "abc" and it initially starts as unexpanded, shown by the three dots:

>>> from lazychains import lazychain
>>> c = lazychain( "abc")
>>> c
chain([...])

We can force the expansion of c by performing (say) a lookup or by forcing the whole chain of items by calling expand:

>>> c[1]                   # Force the expansion of the next 2 elements.
True
>>> c
chain(['a','b',...])
>>> c.expand()             # Force the expansion of the whole chain.
chain(['a','b','c'])

Chain are typically a lot less efficient than using ordinary arrays. So, almost all the time you should carry on using ordinary arrays and/or tuples. But Chains have a couple of special features that makes them the perfect choice for some problems.

  • Chains are immutable and hence can safely share their trailing segments.
  • Chains can make it easy to work with extremely large (or infinite) sequences.

Expanded or Unexpanded

When you construct a chain from an iterator, you can choose whether or not it should be immediately expanded by calling chain rather than lazychain. The difference between the two is pictured below. First we can see what happens in the example given above where we create the chain using lazychain on "abc".

chain

By contrast, we would immediately go to a fully expanded chain if we were to simply apply chain:

>>> from lazychains import chain
>>> c = chain( "abc" )
>>> c
chain(['a','b','c'])
>>> 

lazychain

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lazychains-0.3.1.tar.gz (81.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lazychains-0.3.1-py3-none-any.whl (18.6 kB view details)

Uploaded Python 3

File details

Details for the file lazychains-0.3.1.tar.gz.

File metadata

  • Download URL: lazychains-0.3.1.tar.gz
  • Upload date:
  • Size: 81.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for lazychains-0.3.1.tar.gz
Algorithm Hash digest
SHA256 b20a097bcba7ffb8852802fc18a49fa8ddb1af0236729863c9dd3b615095b078
MD5 b12959a6c223b1ff5c53325ef1698c8c
BLAKE2b-256 3f5965beee97432892d6ba917a1fcb5f6a78768286314318aba212a3ac2471b4

See more details on using hashes here.

File details

Details for the file lazychains-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: lazychains-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 18.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for lazychains-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 38450b85c8e81cb30fc4c6c4b0836a5d1683ea777738fa9f04c20e10a92108e8
MD5 cfaff739f3b0c672378715267b35d259
BLAKE2b-256 87541f86564e669bfa598a043a9f4d24db098e840481597ad923da1593f9d82d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page