Ich arbeite derzeit mit einer großen Liste von Listen (~ 280k Listen) und einer kleineren Liste (~ 3.5k Listen). Ich versuche, den ersten Index in der kleineren Liste mit dem ersten Index in der großen Liste effizient zu vergleichen. Wenn sie übereinstimmen, möchte ich beide Listen aus der kleinen und großen Liste mit einem übereinstimmenden ersten Index zurückgeben.Effizientes Vergleichen des ersten Eintrags in jeder Liste von zwei großen Listenlisten?
Zum Beispiel:
Große Liste 1:
[[a,b,c,d],[e,f,g,h],[i,j,k,l],[m,n,o,p]]
Kleinere Liste 2:
[[e,q,r,s],[a,t,w,s]]
Würde wieder
[([e,q,r,s],[e,f,g,h]),([a,t,w,s],[a,b,c,d])]
ich es zur Zeit eingerichtet haben, wie hier gezeigt , wo al Die Anzahl der Tupel wird mit jedem Tupel zurückgegeben, das die zwei Listen enthält, die ein übereinstimmendes erstes Element haben. Mir geht es gut, wenn andere Datenstrukturen verwendet werden. Ich habe versucht, eine Reihe von Tupeln zu verwenden, hatte aber Probleme, herauszufinden, wie es schneller geht als das, was ich bereits habe.
Mein Code auf diese beiden Listen von Listen zu vergleichen, ist dies derzeit:
match = []
for list_one in small_list:
for list_two in large_list:
if str(list_one[0]).lower() in str(list_two[0]).lower():
match.append((spm_values, cucm_values))
break
return match
Was passiert, wenn eine der Listen mehr als eine Unterliste hat, die mit dem gleichen Wert beginnt? Oder das ist nicht möglich –
Das wird in diesem Fall nicht passieren - das erste Element ist eine MAC-Adresse. – KoolAid
Zunächst ist der 'in'-Operator keine geeignete Methode, um die Gleichheit zu überprüfen, die Sie für dieses Ziel' == 'verwenden sollten. Zweitens, warum konvertierst du den ersten Gegenstand in 'str'? – Kasramvd