Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-02-2012, 16:39   #1
snowx
Junior Member
 
Iscritto dal: Sep 2011
Messaggi: 12
[PYTHON] ottimizzare ciclo e controlli

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?
snowx è offline   Rispondi citando il messaggio o parte di esso
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
Old 28-02-2012, 08:14   #3
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Intanto vedo che c'è un errore. Dove c'è iadd devi lasciare il vecchio i.add.

Poi la notte (soprattutto il sonno ristoratore) porta consiglio.

Se l'obiettivo è "raccogliere in una (anche nuova) lista tutti gli elementi di una lista che soddisfino una certa condizione" si fa subito e in maniera molto più elegante con una list comprehension:
Codice:
def f(Righe):

  ElementiTrovati = set()

  return [Elemento for Elemento in Righe if Elemento not in ElementiTrovati]
Se non t'interessa l'ordine, te ne esci molto più velocemente così:
Codice:
Lista = set(Righe)
Perché set crea un nuovo insieme, prendendo gli elementi da un oggetto sequenza (come le liste, appunto) o iteratore che gli si può passare.
__________________
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
 Rispondi


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Cercate uno smartphone? Ecco 7 modelli i...
Paramount non molla: Netflix è pr...
Missione Artemis II diretta verso la Lun...
Toy Story 5 arriva al cinema: è l...
Intel cambia rotta su Linux? Nuove assun...
Samsung aggiorna Bixby con One UI 8.5: p...
L'Etiopia vieta le auto a combustione: a...
Pirateria audiovisiva: la Guardia di Fin...
Ubisoft conferma due nuovi Far Cry in sv...
Chi vincerà il Festival di Sanrem...
G42 e Cerebras portano in India un super...
Offerte aggiornate del weekend Amazon: 7...
4 MacBook Air in offerta e scende a 939€...
Chrome cambia il tuo modo di lavorare: o...
Minimo storico iPhone 17 su Amazon: 909€...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:53.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v