ฉันต้องการวิธีเปรียบเทียบโซลูชันที่แตกต่างกันซึ่งทำให้ง่ายต่อการหมุนลูกบิด
ก่อนอื่นฉันสร้างข้อมูลของฉัน:
import random
N = 16 * 1024
x = range(N)
random.shuffle(x)
y = random.sample(range(N), N / 10)
จากนั้นฉันก็นิยามฟังก์ชั่นของฉัน:
def list_set(value_list, index_list):
index_list = set(index_list)
result = [value for index, value in enumerate(value_list) if index not in index_list]
return result
def list_del(value_list, index_list):
for index in sorted(index_list, reverse=True):
del(value_list[index])
def list_pop(value_list, index_list):
for index in sorted(index_list, reverse=True):
value_list.pop(index)
จากนั้นฉันก็ใช้timeit
เปรียบเทียบโซลูชัน:
import timeit
from collections import OrderedDict
M = 1000
setup = 'from __main__ import x, y, list_set, list_del, list_pop'
statement_dict = OrderedDict([
('overhead', 'a = x[:]'),
('set', 'a = x[:]; list_set(a, y)'),
('del', 'a = x[:]; list_del(a, y)'),
('pop', 'a = x[:]; list_pop(a, y)'),
])
overhead = None
result_dict = OrderedDict()
for name, statement in statement_dict.iteritems():
result = timeit.timeit(statement, number=M, setup=setup)
if overhead is None:
overhead = result
else:
result = result - overhead
result_dict[name] = result
for name, result in result_dict.iteritems():
print "%s = %7.3f" % (name, result)
เอาท์พุต
set = 1.711
del = 3.450
pop = 3.618
ดังนั้นเครื่องกำเนิดที่มีดัชนีใน a set
จึงเป็นผู้ชนะ และเป็นเร็วขึ้นเล็กน้อยแล้วdel
pop