生成
生成的方法有以下6种:append,+=[],[循环],list(),extend,insert。
删除
删除的方法有3种,分别是remove,pop和del。其中remove和pop是list的方法,而del是内置的方法。需要特别注意的是,使用循环删除需要倒序,就是从最后一个开始处理。因为如果是正序,删除列表元素之后,列表的长度发生了变化,会导致下标越界。而且删除的元素也可能不是想要的元素。
代码
import line_profiler
import sys
def append(n):
a = []
for i in range(n):
a.append(i)
def pe(n):
a = []
for i in range(n):
a += [i]
def one(n):
a = [i for i in range(n)]
def uselist(n):
a = list(range(n))
def extend(n):
a = []
for i in range(n):
a.extend([i])
def insert(n):
a = []
for i in range(n):
a.insert(-1, i)
def remove(L):
n = len(L)
for i in range(n-1,-1,-1):
L.remove(L[i])
def pop(L):
n = len(L)
for i in range(n-1,-1,-1):
L.pop(L[i])
def delete(L):
n = len(L)
for i in range(n-1,-1,-1):
del L[i]
def main():
n = 10**3
list1 = list(range(n))
list2 = list(range(n))
list3 = list(range(n))
append(n) #append
pe(n) #+=[i]
one(n) #[]
uselist(n) #list
extend(n) #extend
insert(n) #insert
remove(list1)
pop(list2)
delete(list3)
profile = line_profiler.LineProfiler(main)
profile.enable()
main()
profile.disable()
profile.print_stats(sys.stdout)
结果
生成列表效率
使用list()方法的最快,其次是使用[循环]模式。+=[]比append,insert和extend要快上一些。
删除列表效率
删除中最快的是内置方法del,估计是调用c程序的问题。而pop要快于remove,估计是内部实现方法不同导致的。因为remove是删除的数值,估计在内部实现的时候用到了查找数值。而pop是删除对应的下标,会速度更快。
总结
生成列表使用list()效率最高,删除使用del方法最快。删除需要倒序进行。