Esta es una pregunta bastante conceptual, pero esperaba poder obtener buenos consejos al respecto. Gran parte de la programación que hago es con matrices ( NumPy ); A menudo tengo que hacer coincidir elementos en dos o más matrices que son de diferentes tamaños y lo primero que hago es un bucle for anidado o, peor aún, un bucle for anidado. Quiero evitar los bucles for tanto como sea posible, porque son lentos (al menos en Python).
Sé que para muchas cosas con NumPy hay comandos predefinidos que solo necesito investigar, pero ¿tienes (como programadores más experimentados) un proceso de pensamiento general que se te ocurra cuando tienes que repetir algo?
Así que a menudo tengo algo como esto, lo cual es horrible y quiero 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]
Sé que hay varias formas diferentes de lograr esto en particular, pero estoy interesado en un método general de pensamiento, si existe.
I want to avoid for-loops as much as possible because they are slow (at least in Python).
Parece que estás resolviendo el problema incorrecto aquí. Si necesita iterar sobre algo, necesita iterar sobre algo; obtendrá un rendimiento similar sin importar qué construcción de Python use. Si su código es lento no es porque tenga for
bucles; es porque está haciendo un trabajo innecesario o está haciendo el trabajo en el lado de Python que podría hacerse en el lado C. En tu ejemplo estás haciendo un trabajo extra; podrías haberlo hecho con un bucle en lugar de dos.