Це досить концептуальне питання, але я сподівався, що зможу отримати якісь гарні поради з цього приводу. Багато програм, які я роблю, - це з ( NumPy ) масивами; Мені часто доводиться зіставляти елементи в двох або більше масивах, що мають різний розмір, і перше, що я переходжу, - це цикл 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, яку можна було б зробити на стороні С. У вашому прикладі ви робите додаткову роботу; ви могли зробити це одним циклом замість двох.