第一个例子:
one = ['billy', 'sally', 'gd', 'kk', 'btb']
two = ['billy', 'sally', 'hh', 'kk', 'ff', 'btb']
opcodes1 = SequenceMatcher(None, one, two).get_opcodes()
opcodes2 = SequenceMatcher(None, two, one).get_opcodes()
正确返回insert
ff:
[('equal', 0, 5, 0, 5), ('replace', 5, 6, 5, 6), ('equal', 6, 9, 6, 9), ('insert', 9, 9, 9, 11), ('equal', 9, 10, 11, 12)]
[('equal', 0, 5, 0, 5), ('replace', 5, 6, 5, 6), ('equal', 6, 9, 6, 9), ('delete', 9, 11, 9, 9), ('equal', 11, 12, 9, 10)]
现在,我想get_opcodes()
找到 a'insert'
旁边的 a 'replace'
... 但它无法。
第二个例子:
one = ['billy', 'sally', 'gd', 'kk', 'btb']
two = ['billy', 'sally', 'hh', 'kk1', 'ff', 'btb']
opcodes1 = SequenceMatcher(None, one, two).get_opcodes()
opcodes2 = SequenceMatcher(None, two, one).get_opcodes()
返回:
[('equal', 0, 2, 0, 2), ('replace', 2, 4, 2, 5), ('equal', 4, 5, 5, 6)]
[('equal', 0, 2, 0, 2), ('replace', 2, 5, 2, 4), ('equal', 5, 6, 4, 5)]
在下一个示例中,我们强制识别差异。我添加了填充......令人惊讶的是它被忽略了......这太神奇了,因为'kk'
在第一个示例中充当填充,阻止'gd'
vs'hh'
被视为'ff'
插入的一部分
第三个例子:
one = ['///////', 'billy', '///////', 'sally', '///////', 'gd', '///////', 'kk', '///////', 'btb']
two = ['///////', 'billy', '///////', 'sally', '///////', 'hh', '///////', 'kk1', '///////', 'ff', '///////', 'btb']
opcodes1 = SequenceMatcher(None, one, two).get_opcodes()
opcodes2 = SequenceMatcher(None, two, one).get_opcodes()
返回:
[('equal', 0, 5, 0, 5), ('replace', 5, 6, 5, 6), ('equal', 6, 7, 6, 7), ('replace', 7, 8, 7, 10), ('equal', 8, 10, 10, 12)]
[('equal', 0, 5, 0, 5), ('replace', 5, 6, 5, 6), ('equal', 6, 7, 6, 7), ('replace', 7, 10, 7, 8), ('equal', 10, 12, 8, 10)]
再一次,当它明显存在时无法识别插入值ff 。