Pull to refresh

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() начинаются с подчёркивания?

Выглядит так, будто автор не разобрался, как работает стандартный инструмент, и поэтому запилил свой собственный, аналогов которому нет ;)

А я думал динамическое программирование нужно для этого :)

Наглядный пример того, что сначала нужно выучить родной язык, а только потом браться за чужой.

различий между строк

Это на каком языке?!!

Sign up to leave a comment.

Articles