Zrobiłem eksperyment, w którym próbowałem znaleźć czas potrzebny na przeszukanie listy Pythona. Mam listę arr
z losowymi liczbami całkowitymi. arr_s
ma te same elementy tylko posortowane.Dlaczego wyszukiwanie w posortowanej liście w python trwa dłużej?
arr = np.random.randint(low = 0, high = 1000, size = 500)
arr_s = sorted(arr)
Teraz tworzę losową tablicę liczb całkowitych find
który posiada elementy, które chcę, aby szukać w arr
i arr_s
.
>>> %%timeit
...:find = np.random.randint(0, 1000, 600)
...:for i in find:
...: if i in arr:
...: continue
[OUT]:100 loops, best of 3: 2.18 ms per loop
>>> %%timeit
...:find = np.random.randint(0, 1000, 600)
...:for i in find:
...: if i in arr_s:
...: continue
[OUT]:100 loops, best of 3: 5.15 ms per loop
Teraz rozumiem, że nie użyłem żadnej konkretnej metody wyszukiwania w posortowanej tablicy (np. Wyszukiwanie binarne). Czyli może to być standardowe wyszukiwanie liniowe, ale dlaczego wyszukiwanie w posortowanej tablicy w nieposortowanej tablicy zajmuje znacznie więcej czasu? Sądzę, że powinno to potrwać niemal w tym samym czasie. Próbowałem wszystkich rodzajów tablicy find
. Tablice, które mają liczby całkowite od (0, 1000), (-1000, -100) i (-10000, 10000), pętle zawsze zajmują więcej czasu w posortowanej tablicy.
Możesz znaleźć częściową odpowiedź na http://stackoverflow.com/questions/12905513/python-in-keyword-efficiency –