To dość konceptualne pytanie, ale miałem nadzieję, że uda mi się uzyskać w tym zakresie kilka dobrych rad. Wiele programowania, które wykonuję, to tablice ( NumPy ); Często muszę dopasowywać elementy w co najmniej dwóch tablicach o różnych rozmiarach, a pierwszą rzeczą, do której się wybieram, jest pętla for lub, co gorsza, zagnieżdżona pętla for. Chcę jak najbardziej unikać pętli for, ponieważ są one powolne (przynajmniej w Pythonie).
Wiem, że w wielu sprawach z NumPy istnieją wcześniej zdefiniowane polecenia, które muszę po prostu zbadać, ale czy ty (jako bardziej doświadczeni programiści) masz ogólny proces myślowy, który przychodzi ci na myśl, gdy musisz coś powtórzyć?
Często mam coś takiego, co jest okropne i chcę tego uniknąć:
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]
Wiem, że istnieje wiele różnych sposobów osiągnięcia tego w szczególności, ale interesuje mnie ogólna metoda myślenia, jeśli istnieje.
I want to avoid for-loops as much as possible because they are slow (at least in Python).
Wygląda na to, że rozwiązujesz tutaj zły problem. Jeśli potrzebujesz iterować nad czymś, musisz iterować nad czymś; uzyskasz podobny wynik wydajności bez względu na to, jakiej konstrukcji Python używasz. Jeśli twój kod jest wolny, to nie dlatego, że masz for
pętle; to dlatego, że wykonujesz niepotrzebną pracę lub pracę po stronie Pythona, którą można wykonać po stronie C. W twoim przykładzie wykonujesz dodatkową pracę; mogłeś to zrobić za pomocą jednej pętli zamiast dwóch.