我尝试在set,list和tuple之间测试速度,并得到了令人惊讶的结果。
在此之前,基于此答案,我知道set比list更快。
这是我的测试代码:
import timeit,time
from sys import getsizeof as Size
List_Test = [range(1000)]
print("The Size of List is : {}".format(Size(List_Test)))
Set_Test = set(range(1000))
print("The Size of Set is : {}".format(Size(Set_Test)))
Tuple_Test = tuple(range(1000))
print("The Size of Tuple is : {}".format(Size(Tuple_Test)))
print("\nNow is to test speed\n")
time.sleep(3)
def Create_List():
List = [i for i in range(1000)]
def Test_List():
for i in List_Test:
if i == 6:
break
def Create_Set():
Set = set(i for i in range(1000))
def Test_Set():
for i in Set_Test:
if i == 6:
break
def Create_Tuple():
Tuple = tuple(i for i in range(1000))
def Test_Tuple():
for i in Tuple_Test:
if i == 6:
break
t = timeit.repeat(stmt="Create_List()",number=1000,setup="from __main__ import Create_List", repeat=30)
print("The Time of Create_List : {}".format(sum(t)/len(t)))
t = timeit.repeat(stmt="Create_Tuple()",number=1000,setup="from __main__ import Create_Tuple", repeat=30)
print("The Time of Create_Tuple : {}".format(sum(t)/len(t)))
t = timeit.repeat(stmt="Create_Set()",number=1000,setup="from __main__ import Create_Set", repeat=30)
print("The Time of Create_Set : {}".format(sum(t)/len(t)))
print("\n")
t = timeit.repeat(stmt="Test_List()",number=1000,setup="from __main__ import Test_List", repeat=30)
print("The Time of Test_List : {}".format(sum(t)/len(t)))
t = timeit.repeat(stmt="Test_Tuple()",number=1000,setup="from __main__ import Test_Tuple", repeat=30)
print("The Time of Test_Tuple : {}".format(sum(t)/len(t)))
t = timeit.repeat(stmt="Test_Set()",number=1000,setup="from __main__ import Test_Set", repeat=30)
print("The Time of Test_Set : {}".format(sum(t)/len(t)))
print("\nThe end")
最后,我发现:
Size: Set > Tuple > List
Speed: List > Tuple > Set
我认为我的测试代码是错误的。它出什么问题了?
编辑:
我更改了测试代码:
List_Test = list(range(500000))
......
def Test_List():
randomNumber = random.randint(0,500000)
for i in List_Test:
if i == randomNumber:
break
# Other test code is the same
测试的结果总是list≈tuple> set。
当将数字500000(x20)更改为10000000时,
它有时是list≈tuple≈set,但经常是list≈tuple> set。
May I infer that only when all of them have the same length(And the number of length is large),we can use set (Although its size is much larger than tuple and list )?
问题来源: stackoverflow