View Single Post
Old 27-02-2012, 23:19   #2
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da snowx Guarda i messaggi
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.).
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso