Первый пример:
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()
найти 'insert'
, который находится рядом с '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'
в первом примере 1031 * действует как заполнение, мешая 'gd'
против '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 , когда оно явно там.