Si può vedere ciò che ritiene essere corrispondenti blocchi:
>>> difflib.SequenceMatcher(isjunk=lambda x: x == " ", a="a b c", b="a bc").get_matching_blocks()
[Match(a=0, b=0, size=3), Match(a=4, b=3, size=1), Match(a=5, b=4, size=0)]
I primi due vi dico che corrisponde a "un b" a "un b" e "c" a "c". (L'ultimo è banale)
La domanda è perché "a b" può essere abbinato. Ho trovato la risposta a questo nel codice. Prima l'algoritmo trova un gruppo di blocchi corrispondenti chiamando ripetutamente find_longest_match. Cosa c'è di notevole di find_longest_match è che permette al personaggio spazzatura di esistere alle estremità della stringa:
If isjunk is defined, first the longest matching block is
determined as above, but with the additional restriction that no
junk element appears in the block. Then that block is extended as
far as possible by matching (only) junk elements on both sides. So
the resulting block never matches on junk except as identical junk
happens to be adjacent to an "interesting" match.
Questo significa che prima si considera "a" e "b" di essere partite (permettendo il carattere spazio sulla fine di "a" e all'inizio di "b").
Quindi, la parte interessante: il codice esegue un ultimo controllo per vedere se uno qualsiasi dei blocchi è adiacente e li unisce se lo sono. Vedere questo commento nel codice:
# It's possible that we have adjacent equal blocks in the
# matching_blocks list now. Starting with 2.5, this code was added
# to collapse them.
Quindi, fondamentalmente è corrispondenti "a" e "b", quindi fondendo i due blocchi in "un b" e chiamando che una partita, nonostante il carattere di spazio essendo spazzatura.
potrebbe essere sbagliato, ma sarebbe 'a' e' B' sia essenzialmente diventano ' "abc"' se i loro spazi vengono ignorati da 'difflib'? – mdscruggs
yes e restituisce '1.0' –
2.7 docstring per SequenceMatcher:" .ratio() restituisce un float in [0, 1], misurando la "similarità" delle sequenze . Come regola generale, un .ratio () valore superiore a 0.6 significa che le sequenze sono corrispondenze ravvicinate " – mdscruggs