set
및 list
에 대한 in
문장의 성능을 평가하려고합니다. 나는 모듈 time
으로 할 수 있다는 것을 알고 있지만, timeit
모듈을 시험해보고 싶다. 그래서 내 코드는 다음과 같습니다목록의 진술을 평가하고 timeit 모듈을 통해 설정 한 이상한 결과
from timeit import Timer
def func_to_test(val, s):
return val in s
if __name__ == "__main__":
val = 346
n = 100000
s = set([x for x in range(n)])
l = [x for x in range(n)]
list_timer = Timer("func_to_test(%s, %s)" % (val, l), "from __main__ import func_to_test")
set_timer = Timer("func_to_test(%s, %s)" % (val, s), "from __main__ import func_to_test")
print(list_timer.timeit(100))
print(set_timer.timeit(100))
출력은 다음과 같습니다
0.1953735960000813
0.6675883569996586
그러나 list
에 대한 이유를 in
문 set
보다 더 나은 성능 "을 가지고"? 나는 그렇지 않다는 것을 알고 있지만, 왜 timeit
모듈로 이러한 결과가 나오는지?
큰 n을 사용하면이 경우 집합의 상수 계수가 다소 높아지므로 l보다 느리게 성장하지 않습니다. 작은 n – Natecat