## `get_opcodes`()

Return list of 5-tuples describing how to turn a into b. Each tuple is of the form `(tag, i1, i2, j1, j2)`. The first tuple has `i1 == j1 == 0`, and remaining tuples have i1 equal to the i2 from the preceding tuple, and, likewise, j1 equal to the previous j2.

The tag values are strings, with these meanings:

Value

Meaning

`'replace'`

`a[i1:i2]` should be replaced by `b[j1:j2]`.

`'delete'`

`a[i1:i2]` should be deleted. Note that `j1 == j2` in this case.

`'insert'`

`b[j1:j2]` should be inserted at `a[i1:i1]`. Note that `i1 == i2` in this case.

`'equal'`

`a[i1:i2] == b[j1:j2]` (the sub-sequences are equal).

For example:

``````>>> a = "qabxcd"
>>> b = "abycdf"
>>> s = SequenceMatcher(None, a, b)
>>> for tag, i1, i2, j1, j2 in s.get_opcodes():
...     print('{:7}   a[{}:{}] --> b[{}:{}] {!r:>8} --> {!r}'.format(
...         tag, i1, i2, j1, j2, a[i1:i2], b[j1:j2]))
delete    a[0:1] --> b[0:0]      'q' --> ''
equal     a[1:3] --> b[0:2]     'ab' --> 'ab'
replace   a[3:4] --> b[2:3]      'x' --> 'y'
equal     a[4:6] --> b[3:5]     'cd' --> 'cd'
insert    a[6:6] --> b[5:6]       '' --> 'f'
``````