Ich wollte etwas, das zwei Listen aufnehmen kann und was diff
in bash
tut. Da diese Frage zuerst auftaucht, wenn Sie nach "Python diff zwei Listen" suchen und nicht sehr spezifisch ist, werde ich posten, was ich herausgefunden habe.
Verwendung von SequenceMather
de difflib
können Sie zwei Listen vergleichen wie diff
tut. Keine der anderen Antworten gibt die Position an, an der der Unterschied auftritt, diese aber schon. Einige Antworten geben die Differenz nur in einer Richtung an. Einige ordnen die Elemente neu an. Einige behandeln keine Duplikate. Aber diese Lösung gibt Ihnen eine echte Differenz zwischen zwei Listen:
a = 'A quick fox jumps the lazy dog'.split()
b = 'A quick brown mouse jumps over the dog'.split()
from difflib import SequenceMatcher
for tag, i, j, k, l in SequenceMatcher(None, a, b).get_opcodes():
if tag == 'equal': print('both have', a[i:j])
if tag in ('delete', 'replace'): print(' 1st has', a[i:j])
if tag in ('insert', 'replace'): print(' 2nd has', b[k:l])
Diese Ausgaben:
both have ['A', 'quick']
1st has ['fox']
2nd has ['brown', 'mouse']
both have ['jumps']
2nd has ['over']
both have ['the']
1st has ['lazy']
both have ['dog']
Natürlich werden Sie am meisten davon profitieren, wenn Ihre Bewerbung die gleichen Annahmen wie die anderen Antworten enthält. Aber wenn Sie nach einer echten diff
Funktionalität, dann ist dies der einzige Weg, den wir gehen können.
Zum Beispiel konnte keine der anderen Antworten damit umgehen:
a = [1,2,3,4,5]
b = [5,4,3,2,1]
Aber dieser hier schon:
2nd has [5, 4, 3, 2]
both have [1]
1st has [2, 3, 4, 5]