Python library for computing edit distance between arbitrary Python sequences.
Python
105
88 commits
updated Sep 28, 2026
Python module for computing edit distances and alignments between sequences.
I needed a way to compute edit distances between sequences in Python. I wasn't able to find any appropriate libraries that do this so I wrote my own. There appear to be numerous edit distance libraries available for computing edit distances between two strings, but not between two sequences.
This is written entirely in Python. This implementation could likely be optimized to be faster within Python. And could probably be much faster if implemented in C.
The library API is modeled after difflib.SequenceMatcher. This is very similar to difflib, except that this module computes edit distance (Levenshtein distance) rather than the Ratcliff and Oberhelp method that Python's difflib uses. difflib "does not yield minimal edit sequences, but does tend to yield matches that 'look right' to people."
If you find this library useful or have any suggestions, please send me a message.
The easiest way to install is using pip:
pip install edit_distance
To uninstall with pip:
pip uninstall edit_distance
This requires Python 3.10 or later.
To see examples of usage, view the difflib documentation. Additional API-level documentation is available on ReadTheDocs
Example API usage:
import edit_distance
ref = ["hi", "there", "how", "are", "you"]
hyp = ["hi", "here", "how", "are", "you", "doing"]
sm = edit_distance.SequenceMatcher(a=ref, b=hyp)
sm.distance()
# 2
sm.get_opcodes()
# [['equal', 0, 1, 0, 1], ['replace', 1, 2, 1, 2], ['equal', 2, 3, 2, 3], ['equal', 3, 4, 3, 4], ['equal', 4, 5, 4, 5], ['insert', 5, 5, 5, 6]]
list(sm.get_matching_blocks())
# [[0, 0, 1], [2, 2, 1], [3, 3, 1], [4, 4, 1]]
sm.ratio()
# 0.7272727272727273
Installing the package also installs an edit-distance command, which compares
two files line by line and prints the edit distance between each pair of lines:
edit-distance file1.txt file2.txt
In addition to the SequenceMatcher methods, distance() and matches() methods
are provided which compute the edit distance and the number of matches.
sm.distance()
sm.matches()
Even if the alignment of the two sequences is identical to difflib,
get_opcodes() and get_matching_blocks() may return slightly different
sequences. The opcodes returned by this library represent individual character
operations, and thus should never span two or more characters.
This doesn't implement the 'junk' matching features in difflib.
To run unit tests:
python -m unittest
To deploy...
docs/conf.py to the package version (it still hardcodes 0.2.3)
instead of tracking the version derived from the git tag.PYPI_API_TOKEN secret.For contributions, it's best to Github issues and pull requests. Proper testing and documentation required.
Code of conduct is expected to be reasonable, especially as specified by the Contributor Covenant
Python library for computing edit distance between arbitrary Python sequences.
Python
105
88 commits
updated Sep 28, 2026
Python module for computing edit distances and alignments between sequences.
I needed a way to compute edit distances between sequences in Python. I wasn't able to find any appropriate libraries that do this so I wrote my own. There appear to be numerous edit distance libraries available for computing edit distances between two strings, but not between two sequences.
This is written entirely in Python. This implementation could likely be optimized to be faster within Python. And could probably be much faster if implemented in C.
The library API is modeled after difflib.SequenceMatcher. This is very similar to difflib, except that this module computes edit distance (Levenshtein distance) rather than the Ratcliff and Oberhelp method that Python's difflib uses. difflib "does not yield minimal edit sequences, but does tend to yield matches that 'look right' to people."
If you find this library useful or have any suggestions, please send me a message.
The easiest way to install is using pip:
pip install edit_distance
To uninstall with pip:
pip uninstall edit_distance
This requires Python 3.10 or later.
To see examples of usage, view the difflib documentation. Additional API-level documentation is available on ReadTheDocs
Example API usage:
import edit_distance
ref = ["hi", "there", "how", "are", "you"]
hyp = ["hi", "here", "how", "are", "you", "doing"]
sm = edit_distance.SequenceMatcher(a=ref, b=hyp)
sm.distance()
# 2
sm.get_opcodes()
# [['equal', 0, 1, 0, 1], ['replace', 1, 2, 1, 2], ['equal', 2, 3, 2, 3], ['equal', 3, 4, 3, 4], ['equal', 4, 5, 4, 5], ['insert', 5, 5, 5, 6]]
list(sm.get_matching_blocks())
# [[0, 0, 1], [2, 2, 1], [3, 3, 1], [4, 4, 1]]
sm.ratio()
# 0.7272727272727273
Installing the package also installs an edit-distance command, which compares
two files line by line and prints the edit distance between each pair of lines:
edit-distance file1.txt file2.txt
In addition to the SequenceMatcher methods, distance() and matches() methods
are provided which compute the edit distance and the number of matches.
sm.distance()
sm.matches()
Even if the alignment of the two sequences is identical to difflib,
get_opcodes() and get_matching_blocks() may return slightly different
sequences. The opcodes returned by this library represent individual character
operations, and thus should never span two or more characters.
This doesn't implement the 'junk' matching features in difflib.
To run unit tests:
python -m unittest
To deploy...
docs/conf.py to the package version (it still hardcodes 0.2.3)
instead of tracking the version derived from the git tag.PYPI_API_TOKEN secret.For contributions, it's best to Github issues and pull requests. Proper testing and documentation required.
Code of conduct is expected to be reasonable, especially as specified by the Contributor Covenant