Skip to main content

Python Span

A simple library providing Span and ReadOnlySpan classes. The idea of these are very similar to C#'s Span, however they are a pure-Python implementation of it. The start and end points are handled via Python's slice object, meaning negative ends and starts work as expected, and step works is it does for sliced lists.

The classes provide read/write and read-only access to certain sections of list-like object, without having to reallocate them via normal slicing. Any object that can be indexed and has a length can be used, meaning you can even create ReadOnlySpans over strings (useful in processing large strings that could have been read from a file).

These classes are useful when looking at certain regions of a list that is very long (upwards of 100,000s of items). Using the classes looks like this:

import math

data = get_data() # returns a very large list

# we only want the first half of the list
end = int(math.ceil(len(data) / 2))

# without span
first_half = data[:end] # copies the entire first half

# with span
first_half = Span(data, 0, end)
# no copies, just a reference is stored, acts like a list of half the length

In the above example, if the list was very long (e.g. 1,000,000 items), then the first example would copy the entire second half of the list into the new variable, whereas the second example just stores the reference, and the start & end points that you requested. The new Span object would then act exactly like a list of half the length (e.g. len would return a length of 500,000 for the example before.). The only allocations that are done are for the Span objects themselves, and the object stores very little data inside (just the start, end, and step values, and the object reference), meaning that it will have little impact on memory by itself.

Metadata

Release files for spanning 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for spanning 1.0.0
File Size Uploaded
spanning-1.0.0.tar.gz 4.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for spanning 1.0.0
File Interpreter ABI Platform
spanning-1.0.0-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 8.9 kB

Release files / spanning-1.0.0.tar.gz

Download URL spanning-1.0.0.tar.gz
Size 4.4 kB
Tags Source
SHA-256 checksum
How to use checksums
db15601f68ac64b90c34955c05b9fa9ec4e7d8f3bf88fbc7c905cdec229b519b
BLAKE2b-256 checksum
How to use checksums
df35b6ebe23d6c9ae51814bb422b78e5f98a6ad45e949906a0c1659042cd2df4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / spanning-1.0.0-py2.py3-none-any.whl

Download URL spanning-1.0.0-py2.py3-none-any.whl
Size 4.6 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
14019e6029158e0aeb6bd95d66d5575c954ec32efae0ba71c3bc7543966b6f5e
BLAKE2b-256 checksum
How to use checksums
835d00870dadc71e36abb4526372a6f67bdce8060268fed85c8696a58d5fe9b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page