Это довольно концептуальный вопрос, но я надеялся получить хороший совет по этому вопросу. Я занимаюсь программированием с массивами ( NumPy ); Мне часто приходится сопоставлять элементы в двух или более массивах разных размеров, и первое, на что я обращаюсь - это цикл for или, что еще хуже, вложенный цикл for. Я хочу как можно больше избегать циклов for, потому что они медленные (по крайней мере, в Python).
Я знаю, что для многих вещей с NumPy есть предопределенные команды, которые мне просто нужно исследовать, но есть ли у вас (как у более опытных программистов) общий мыслительный процесс, который приходит на ум, когда вам приходится что-то повторять?
Поэтому у меня часто бывает что-то подобное, что ужасно, и я хочу этого избежать:
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]
Я знаю, что для достижения этой цели, в частности, существует множество различных способов, но меня интересует общий метод мышления, если он существует.
I want to avoid for-loops as much as possible because they are slow (at least in Python).
Похоже, вы решаете не ту проблему здесь. Если вам нужно перебрать что-то, вам нужно перебрать что-то; Вы получите аналогичный удар по производительности независимо от того, какую конструкцию Python вы используете. Если ваш код медленный, это не потому, что у вас есть for
циклы; это потому, что вы выполняете ненужную работу или работу на стороне Python, что может быть сделано на стороне C. В вашем примере вы делаете дополнительную работу; Вы могли бы сделать это с одним циклом вместо двух.