Questa è una domanda piuttosto concettuale, ma speravo di ottenere qualche buon consiglio in merito. Gran parte della programmazione che faccio è con array ( NumPy ); Spesso devo abbinare gli elementi in due o più array di dimensioni diverse e la prima cosa a cui vado è un for-loop o, peggio ancora, un for-loop nidificato. Voglio evitare il più possibile i for-loop, perché sono lenti (almeno in Python).
So che per molte cose con NumPy ci sono comandi predefiniti che devo solo ricercare, ma voi (come programmatori più esperti) avete un processo di pensiero generale che viene in mente quando dovete iterare qualcosa?
Quindi ho spesso qualcosa del genere, che è orribile e voglio evitarlo:
small_array = np.array(["one", "two"])
big_array = np.array(["one", "two", "three", "one"])
for i in range(len(small_array)):
for p in range(len(big_array)):
if small_array[i] == big_array[p]:
print "This item is matched: ", small_array[i]
So che ci sono molti modi diversi per raggiungere questo obiettivo in particolare, ma sono interessato a un metodo di pensiero generale, se esiste.
I want to avoid for-loops as much as possible because they are slow (at least in Python).
Sembra che tu stia risolvendo il problema sbagliato qui. Se devi iterare su qualcosa, devi iterare su qualcosa; subirai un simile colpo di prestazione, indipendentemente dal costrutto Python che usi. Se il tuo codice è lento non è perché hai dei for
loop; è perché stai facendo un lavoro non necessario o facendo un lavoro sul lato Python che potrebbe essere fatto sul lato C. Nel tuo esempio stai facendo un lavoro extra; avresti potuto farlo con un loop invece di due.