Comments 7
У вас функция неправильно отрабатывает, в строке изменилась подстрока PycharmProject
на PycharmProjects
, но эта разница подсветилась как-будто изменился весь конец строки.
Почему вы выбрали расстояние Хэмминга вместо Левенштейна для строк?
Не очень понял, что мешает просто сделать обёртку для difflib с желаемым оформлением:
def diff_string(str1: str, str2: str):
rst1 = rst2 = ""
for op, i1, i2, j1, j2 in difflib.SequenceMatcher(a=str1, b=str2).get_opcodes():
if op in ("delete", "replace"):
rst1 += colors.red + str1[i1:i2] + colors.reset
if op in ("insert", "replace"):
rst2 += colors.green + str2[j1:j2] + colors.reset
if op == "equal":
rst1 += str1[i1:i2]
rst2 += str2[j1:j2]
return rst1, rst2
Но даже если нужно тупое посимвольное сравнение, то вариант из поста можно записать чуть менее громоздко (возможно, можно придумать ещё компактнее, но у меня на ночь глядя мозги не очень варят):
def diff_string(str1: str, str2: str):
l1 = len(str1)
l2 = len(str2)
rst1 = rst2 = ""
for a, b in zip(str1, str2):
color = colors.red if a != b else colors.green
rst1 += color + a + colors.reset
rst2 += color + b + colors.reset
if l1 > l2:
rst1 += colors.bg_red + str1[l2:] + colors.reset
rst2 += colors.bg_red + " " * (l1 - l2) + colors.reset
elif l1 < l2:
rst1 += colors.bg_red + " " * (l2 - l1) + colors.reset
rst2 += colors.bg_red + str2[l1:] + colors.reset
return rst1, rst2
Можно узнать, зачем у вас все переменные в diff_string() начинаются с подчёркивания?
Выглядит так, будто автор не разобрался, как работает стандартный инструмент, и поэтому запилил свой собственный, аналогов которому нет ;)
А я думал динамическое программирование нужно для этого :)
Наглядный пример того, что сначала нужно выучить родной язык, а только потом браться за чужой.
различий между строк
Это на каком языке?!!
Разница между двумя строками