C'est une question plutôt conceptuelle, mais j'espérais pouvoir obtenir de bons conseils à ce sujet. Une grande partie de la programmation que je fais se fait avec des tableaux ( NumPy ); Je dois souvent faire correspondre des éléments de deux ou plusieurs tableaux de tailles différentes et la première chose à laquelle je veux en venir est une boucle for, ou pire, une boucle for imbriquée. Je veux éviter les boucles forées autant que possible, car elles sont lentes (au moins en Python).
Je sais que pour beaucoup de choses avec NumPy, il y a des commandes prédéfinies que je dois juste étudier, mais avez-vous (en tant que programmeurs plus expérimentés) un processus de pensée générale qui vous vient à l'esprit lorsque vous devez répéter quelque chose?
J'ai souvent quelque chose comme ça, qui est affreux et que je veux éviter:
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]
Je sais qu'il existe de nombreuses manières différentes d'y parvenir, mais je m'intéresse à une méthode de réflexion générale, si elle existe.
I want to avoid for-loops as much as possible because they are slow (at least in Python).
On dirait que vous résolvez le mauvais problème ici. Si vous avez besoin d'itérer sur quelque chose, vous devez itérer sur quelque chose; vous obtiendrez une performance similaire quelle que soit la construction Python que vous utilisez. Si votre code est lent, ce n'est pas parce que vous avez des for
boucles; c'est parce que vous faites un travail inutile ou que vous travaillez du côté Python, ce qui pourrait être fait du côté C. Dans votre exemple, vous faites un travail supplémentaire. vous auriez pu le faire avec une boucle au lieu de deux.