2016-03-30 4 views
1

Mein CodeWie schreibe ich schneller Python-Code?

with open('data1.txt','r') as f: 
    lst = [int(line) for line in f] 

l1=lst[::3] 
l2=lst[1::3] 
l3=lst[2::3] 

print len(l1) 
print len(l2) 
print len(l3) 

b = [] 
for i in range(3200000): 
    b.append(i+1) 

print len(b) 

mapping = dict(zip(l1, b)) 
matches = [mapping[value] for value in l2 if value not in mapping] 
print matches 

Mein Ziel ist es hier zwei Listen vergleichen zu können, werden sie dieselben Elemente zu erwarten. Adaequat

3200000 
3200000 
3200000 
3200000 
[] 

Aber Problem ist, dass der Code ist sehr langsam und ich werde mehr Berechnungen haben later.How dies zu verbessern? Mein Python

Python 2.7.6 
+0

Wie langsam ist langsam? Wie groß sind Ihre Datenstrukturen? –

+0

verwenden Sie Python 2.x? Wenn ja, ändere 'range' in' xrange', 'range' erstellt liste eat memories – haifzhan

+0

Benutze [numpy] (http://www.numpy.org/) um mit Datenfeldern zu arbeiten. –

Antwort

1

Dies wird in Bezug auf den Speicher nicht so effizient sein, aber sehr effizient in Bezug auf die Ausführungsgeschwindigkeit.
Es scheint, als ob Sie nicht l3 verwenden. diff hat alles, was nicht in beiden Listen enthalten ist.

import itertools 
with open('data1.txt','r') as f: 
    lines = map(int, f) 

l1 = itertools.islice(lines, 0, None, 3) 
l2 = itertools.islice(lines, 1, None, 3) 
diff = set(l1)^set(l2) 
0

Erstens, ich sehe nicht, wie das funktionieren kann:

[mapping[value] for value in l2 if value not in mapping] 

Ich nehme an, die value ist immer in mapping und das Feld ist immer leer. Es sollte sonst einen Fehler verursachen, da der Schlüssel nicht gefunden wird.

Dann versuchen so etwas wie dies, ohne Zuordnung nutzlos Speicher:

mapping = {} 
l2 = [] 

with open('data1.txt','r') as f: 
    for i,line in enumerate(f): 
     v = int(line) 
     if i % 3 == 0: 
      mapping[v] = i+1 
     elif i % 3 == 1: 
      l2.append(v) 

matches = [mapping[value] for value in l2 if value not in mapping] # ?? 

print(matches) 
+0

Ihr Code funktioniert. Datei "b18.py", Zeile 11, in maps.append (Zuordnung [v]) KeyError: 1207 –

+0

Ja, wegen meiner ersten Bemerkung. Ich weiß nicht, was du dort wirklich willst. Korrigiere die Aussage, wo ich die '# ??' stelle. – JulienD

+0

Wieder Probleme. Traceback (letzter Aufruf zuletzt): Datei "b20.py", Zeile 10, in l2 [i] = v IndexError: Listenzuweisungsindex außerhalb des Bereichs –