Vorrei allineare due elenchi in un modo simile a quello che farebbe difflib.Differ
tranne che voglio essere in grado di definire una funzione di corrispondenza per confrontare gli elementi, non solo usare l'uguaglianza delle stringhe e preferibilmente una funzione di corrispondenza che può restituire un numero tra 0.0 e 1.0, non solo un booleano.come diff/allineare gli elenchi Python usando la funzione di corrispondenza arbitraria?
Così, per esempio, dire che ho avuto le due liste:
L1 = [('A', 1), ('B', 3), ('C', 7)]
L2 = ['A', 'b', 'C']
e voglio essere in grado di scrivere una funzione partita come questa:
def match(item1, item2):
if item1[0] == item2:
return 1.0
elif item1[0].lower() == item2.lower():
return 0.5
else:
return 0.0
e poi fare:
d = Differ(match_func=match)
d.compare(L1, L2)
e avere diff con la funzione di corrispondenza. Come difflib
, preferirei che l'algoritmo fornisse risultati di tipo Ratcliff-Obershelp più intuitivi piuttosto che una distanza puramente minima di Levenshtein.
questo è legato alla possibilità di specificare il "costo" di fare una particolare sostituzione di ottenere da L1 a L2 ma l'avviso consente anche che ogni voce di elenco sia una struttura complessa solo una parte del quale può avere un ruolo nel confronto –
nota che l'obiettivo principale è allineare quali elementi eseguono (approssimativamente) corrispondenze e identificare quali elementi non si accoppiano su; quindi non è un tradizionale "passaggio da L1 a L2" diff –
sto fondamentalmente cercando qualcosa come gli algoritmi Needleman-Wunsch o Smith-Waterman in Python? –