import contextlib, time
@contextlib.contextmanager
def timer(msg):
start = time.time()
yield
end = time.time()
print("%s: %.02fms" % (msg, (end - start) * 1000))
with timer("insert"):
A = []
for i in range(100000):
A.insert(0, i)
with timer("concat"):
A = []
for i in range(100000):
A = [i] + A
with timer("slice"):
A = []
for i in range(100000):
A[:0] = [i]
insert: 2633.50ms
concat: 12023.57ms
slice: 909.23ms
用slice的方式进行插入效率会比insert高很多
import contextlib, time
@contextlib.contextmanager
def timer(msg):
start = time.time()
yield
end = time.time()
print("%s: %.02fms" % (msg, (end - start) * 1000))
with timer("insert"):
A = []
for i in range(100000):
A.insert(len(A), i)
with timer("concat"):
A = []
for i in range(100000):
A = A + [i]
with timer("slice"):
A = []
for i in range(100000):
A[-1:] = [i]
with timer("append"):
A = []
for i in range(100000):
A.append(i)
insert: 19.58ms
concat: 12477.56ms
slice: 20.21ms
append: 10.67ms