2016-09-20 2 views
0

Ich brauche Hilfe mit meiner Schleife. In meinem Skript habe ich zwei riesige Listen (~ 87.000 Integer) aus einer Eingabedatei.Wie kann ich die Überschneidungen zwischen Listen mit zwei Elementen optimieren und eine Liste von Listen ohne Duplikate in Python generieren?

prüfen dieses Beispiel mit ein paar Zahlen:

Wir haben zwei Listen:

nga = [1, 3, 5, 34, 12]

ngb = [3, 4, 6, 6, 5]

Die Reihenfolge dieser beiden Listen ist wichtig, weil jede Position mit der gleichen Zusammenhang steht Position in der anderen Liste, so ist 1 in nga mit 3 in ,verwandtmit 4, etc ...

Also, was ich will, ist dieser Ausgang:

listoflists = [[1, 3, 4], [5, 6, 12, 34]]

Was ich bisher haben diese Schleife ist:

listoflists = [] 

for p in range(0, len(nga)): 
    z = [nga[p], ngb[p]] 
    for a, b in zip(nga, ngb): 
     if a in z: 
      z.append(b) 
     else: 
      pass 
     if b in z: 
      z.append(a) 
     else: 
      pass 
    listoflists.append(z) 

Das Problem erscheint, wenn ich habe die ganzen Listen benutzt, weil es abgestürzt ist und mir einen Segmentierungsfehlerfehler gegeben hat. Was kann ich also tun?

Vielen Dank im Voraus.

+0

werden Sie Python 2 oder Python 3 verwenden? –

+3

Wie läuft die Prozedur ab 'nga = [1, 3, 5, 34, 12]' und 'ngb = [3, 4, 6, 6, 5]' zu 'listoflists = [[1, 3, 4] , [5, 6, 12, 34]]? –

+0

mit Ihrem Eingang bekomme ich '[[1, 3, 3, 1, 4, 3], [3, 4, 1, 4, 3], [5, 6, 6, 5, 34, 12], [34 , 6, 5, 6, 34, 12], [12, 5, 6, 5, 34, 5, 12]] –

Antwort

0

ich mein Problem mit dieser schönen Funktion gelöst:

net = [] 
for a, b in zip(nga, ngb): 
    net.append([a, b]) 

def nets_super_gen(net): 
    not_con = list(net) 
    netn = list(not_con[0]) 
    not_con.remove(not_con[0]) 
    new_net = [] 
    while len(netn) != len(new_net): 
     new_net = list(netn) 
     for z in net: 
      if z[0] in netn and z[1] not in netn: 
       netn.append(z[1]) 
       not_con.remove(z) 
      elif z[0] not in netn and z[1] in netn: 
       netn.append(z[0]) 
       not_con.remove(z) 
      try: 
       if z[0] in netn and z[1] in netn: 
        not_con.remove(z) 
      except ValueError: 
       pass 
    return(netn, not_con) 

list_of_lists, not_con = nets_super_gen(net) 
Verwandte Themen