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