Essa é uma pergunta bastante conceitual, mas eu esperava conseguir alguns bons conselhos sobre isso. Muita da programação que faço é com matrizes ( NumPy ); Frequentemente, tenho que combinar itens em duas ou mais matrizes de tamanhos diferentes e a primeira coisa a que vou é um loop for ou, pior ainda, um loop for aninhado. Eu quero evitar os loops, tanto quanto possível, porque eles são lentos (pelo menos em Python).
Eu sei que para muitas coisas com o NumPy existem comandos predefinidos que eu só preciso pesquisar, mas você (como programadores mais experientes) tem um processo de pensamento geral que vem à mente quando você precisa iterar algo?
Então, muitas vezes tenho algo assim, o que é horrível e quero evitá-lo:
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]
Eu sei que existem várias maneiras diferentes de conseguir isso em particular, mas estou interessado em um método geral de pensamento, se existir.
I want to avoid for-loops as much as possible because they are slow (at least in Python).
Parece que você está resolvendo o problema errado aqui. Se você precisar iterar sobre algo, precisará iterar sobre algo; você terá um desempenho semelhante, independentemente da construção do Python usada. Se seu código é lento, não é porque você tem for
loops; é porque você está fazendo um trabalho desnecessário ou no lado Python que pode ser feito no lado C. No seu exemplo, você está fazendo um trabalho extra; você poderia ter feito isso com um loop em vez de dois.