Quote:
Originariamente inviato da snowx
ho una parte di codice che controlla la presenza di valori in degli insiemi e se non sono presenti li aggiunge, altrimenti prende tutta la riga e la inserisce in una lista:
Codice:
x, y, z, k, j, h = set(),set(),set(), set(), set(), set()
for i in righe:
if i[0] not in x and i[1] not in y and i[2] not in z and i[3] not in k\
and i[4] not in j and i[5] not in h:
i.add(i[0])
y.add(i[1])
z.add(i[2])
k.add(i[3])
j.add(i[4])
h.add(i[5])
else:
lista.append(i)
vorrei ottimizzarlo, poiche è abbastanza lento, consigli?
|
Intanto metti tutto dentro una funzione, perché in questo modo le variabili che dichiari risultano locali e sono le più veloci in assoluto a essere utilizzate in Python.
Vedi:
LOAD_FAST, per andare veloci su CPython.
Per il resto:
Codice:
def f(lista, righe):
listappend = lista.append
x, y, z, k, j, h = (set(), ) * 6
xadd = x.add
yadd = y.add
zadd = z.add
kadd = k.add
jadd = j.add
hadd = h.add
for i in righe:
i0, i1, i2, i3, i4, i5 = i
if i0 not in x and i1 not in y and i2 not in z and i3 not in k\
and i4 not in j and i5 not in h:
iadd(i0)
yadd(i1)
zadd(i2)
kadd(i3)
jadd(i4)
hadd(i5)
else:
listaappend(i)
P.S. Roba come listaappend, xadd, ecc. in futuro potrebbe essere molto più lenta di quella "naturale" (list.append, x.add, ecc.).