慕容3067478
我为您运行了一些基准测试。这是结果。TL;DR 您可能想使用deque. 否则,insert/append或pop/del都可以。添加到最后from collections import dequeimport perfplot# Add to enddef use_append(n): "adds to end" a = [1,2,3,4,5,6,7,8,9,10]*n a.append(7) return 1def use_insert_end(n): "adds to end" a = [1,2,3,4,5,6,7,8,9,10]*n a.insert(len(a),7) return 1def use_add_end(n): "adds to end" a = [1,2,3,4,5,6,7,8,9,10]*n a = a + [7] return 1perfplot.show( setup=lambda n: n, # or simply setup=numpy.random.rand kernels=[ lambda a: use_append(a), lambda a: use_insert_end(a), lambda a: use_add_end(a), ], labels=["use_append", "use_insert_end", "use_add_end"], n_range=[2 ** k for k in range(15)], xlabel="len(a)",)从末尾删除# Removing from the enddef use_pop(n): "removes from end" a = [1,2,3,4,5,6,7,8,9,10]*n a.pop() return 1def use_del_last(n): "removes from end" a = [1,2,3,4,5,6,7,8,9,10]*n del(a[-1]) return 1def use_index_to_end(n): "removes from end" a = [1,2,3,4,5,6,7,8,9,10]*n a = a[:-1] return 1perfplot.show( setup=lambda n: n, kernels=[ lambda a: use_pop(a), lambda a: use_del_last(a), lambda a: use_index_to_end(a), ], labels=["use_pop", "use_del_last", "use_index_to_end"], n_range=[2 ** k for k in range(20)], xlabel="len(a)",)添加到开头# Add to beginningdef use_insert(n): "adds to beginning" a = [1,2,3,4,5,6,7,8,9,10]*n a.insert(0,7) return 1def use_deque_appendleft(n): "adds to beginning" a = [1,2,3,4,5,6,7,8,9,10]*n a = deque(a) a.appendleft(7) return 1def use_add_start(n): "adds to beginning" a = [1,2,3,4,5,6,7,8,9,10]*n a = [7] + a return 1perfplot.show( setup=lambda n: n, # or simply setup=numpy.random.rand kernels=[ lambda a: use_insert(a), lambda a: use_deque_appendleft(a), lambda a: use_add_start(a), ], labels=["use_insert", "use_deque_appendleft","use_add_start"], n_range=[2 ** k for k in range(15)], xlabel="len(a)",)从头开始删除# Remove from beginningdef use_del_first(n): "removes from beginning" a = [1,2,3,4,5,6,7,8,9,10]*n del(a[0]) return 1def use_deque_popleft(n): "removes from beginning" a = [1,2,3,4,5,6,7,8,9,10]*n a = deque(a) a.popleft() return 1def use_index_start(n): "removes from beginning" a = [1,2,3,4,5,6,7,8,9,10]*n a = a[1:] return 1perfplot.show( setup=lambda n: n, # or simply setup=numpy.random.rand kernels=[ lambda a: use_del_first(a), lambda a: use_deque_popleft(a), lambda a: use_index_start(a), ], labels=["use_del_first", "use_deque_popleft", "use_index_start"], n_range=[2 ** k for k in range(15)], xlabel="len(a)",)