Я бы хотел выровнять два списка аналогично тому, что сделал бы difflib.Differ
, за исключением того, что я хочу иметь возможность определять функцию сопоставления для сравнения элементов, а не просто использовать равенство строк и предпочтительно функцию сопоставления, возвращает число от 0,0 до 1,0, а не просто логическое значение.
Так, например, скажем, у меня было два списка:
L1 = [('A', 1), ('B', 3), ('C', 7)]
L2 = ['A', 'b', 'C']
и я хочу иметь возможность написать функцию сопоставления следующим образом:
def match(item1, item2):
if item1[0] == item2:
return 1.0
elif item1[0].lower() == item2.lower():
return 0.5
else:
return 0.0
и затем сделайте:
d = Differ(match_func=match)
d.compare(L1, L2)
и получите его с помощью функции соответствия. Как и difflib
, я бы предпочел, чтобы алгоритм давал более интуитивные результаты типа Ратклифа-Обершельпа, а не чисто минимальное расстояние Левенштейна.