列表中的元素可以使用下标运算符来访问。但是,集合并不支持下标运算符,因为集合中的元素是无序的。使用for循环遍历集合中的所有元素。现在,我们进行一个有趣的实验来测试集合和列表的性能。
1)检测一个元素是否在集合和列表中的各自的执行时间。
2)检测从集合和列表中删除元素时各自的执行时间。
import random
import time
NUMBER_OF_ELEMENTS = 10000
# Create a list
lst = list(range(NUMBER_OF_ELEMENTS))
random.shuffle(lst)
# Create a set from the list
s = set(lst)
# Test if an element is in the set
startTime = time.time()
for i in range(NUMBER_OF_ELEMENTS):
i in s
endTime = time.time()
runTime = int((endTime - startTime) * 1000)
print "To test if ", NUMBER_OF_ELEMENTS, \
"elements are in the set\n", \
"the runtime is ", runTime, "milliseconds"
# Test if an element is in the list
startTime = time.time()
for i in range(NUMBER_OF_ELEMENTS):
i in lst
endTime = time.time()
runTime = int((endTime - startTime) * 1000)
print "\n To test if", NUMBER_OF_ELEMENTS, \
"elements from the set \n" , \
"the runtime is ", runTime, "millseconds"
# Remove elements from a set one at a time
startTime = time.time()
for i in range(NUMBER_OF_ELEMENTS):
s.remove(i)
endTime = time.time()
runTime = int((endTime - startTime) * 1000)
print "\n To remove", NUMBER_OF_ELEMENTS, \
"elements from the set\n", \
"the runtime is ", runTime, "milliseconds"
# Remove elements from a list one at a time
startTime = time.time()
for i in range(NUMBER_OF_ELEMENTS):
lst.remove(i)
endTime = time.time()
runTime = int((endTime - startTime) * 1000)
print "\n To remove", NUMBER_OF_ELEMENTS,\
"elements from the list \n", \
"the runtime is ", runTime, "milliseconds"
—摘自《Python 语言程序设计》 李娜译