Wenn ich eine Liste haben ähnlicheWie finde ich die längste Übereinstimmung aus einer Reihe von Listen in Python?
my_list = [1, 7, 3, 4, 2, 9, 6, 5, 8]
Auch habe ich andere Listen der Länge kleiner als die Länge des my_list
. Zum Beispiel lassen Sie uns sagen, ich habe zwei weitere Listen wie folgt:
my_other_list_1 = [1, 7, 3, 4, 2]
my_other_list_2 = [1, 7, 4, 9, 8]
Alle Listen haben verschiedene Elemente und die anderen Listen haben Elemente aus der ursprünglichen Liste.
Mein Problem ist es, die Liste zu finden (entweder my_other_list_1
oder my_other_list_2
), die die längste Übereinstimmung in my_list
hat. Zuerst möchte ich fragen, wie dieses Problem genannt wird? Dann bevorzuge ich die Länge der längsten Übereinstimmung jeder Liste. Wie mache ich das?
Im Beispiel würde ich my_other_list_1
zurückkehren, weil es eine Übereinstimmung der Länge 5
seit [1, 7, 3, 4, 2]
hat bereits in my_list
. Auch würde ich für my_other_list_2
zurückgeben, weil es eine Übereinstimmung der Länge 2
darin gibt, d.h. [1, 7]
.
Summieren, wenn ich einen Algorithmus A sind und die Eingänge sind my_list
, my_other_list_1
my_other_list_2
und, sollte der Algorithmus
my_other_list_1 has match 5
my_other_list_2 has match 2
NB zurück. Ich denke, das ist ein Problem, das so genannte längste gemeinsame Subsequenz (LCS) Problem, aber wie ich im LCS Problem verstehe, müssen die Subsequenzen nicht aufeinanderfolgend sein.
Wenn Sie nicht die Anforderung haben, dies selbst zu codieren, könnten Sie einen 'difflib.SequenceMatcher' verwenden - sie haben sogar eine' find_longest_match' Methode :-). – mgilson
Dieses Problem wird als das längste gemeinsame Teilstring-Problem bezeichnet. Ich habe es auch als das längste zusammenhängende Subsequenz-Problem bezeichnet. Sie finden weitere Informationen [hier] (https://en.wikipedia.org/wiki/Longest_common_substring_problem), und der Code für dieses Problem ist der zweite Teil von [dieser Antwort] (http://stackoverflow.com/a/ 24547864/5377941) – Greg