从Python中的对象列表中删除对象的最快或最常用的方法

Dyc*_*cey 7 python performance list

假设我有一个列表L不明物体,O1On了,我想删除另一个对象的引用M,其可以参考的对象之一L,我已经成功使用做到这一点:

L = [ O1, O2, ... On]

...

L = [ j for j in L if j not in [ M ] ]
Run Code Online (Sandbox Code Playgroud)

这是可爱的和惯用的...但我必须做很多,我想知道是否没有其他更惯用的方式,或者如果没有更快的方式.

重要的一点是,对象的列表是未知,并且可能可能不包括要排除的对象.我想避免在可能的情况下扩展或子类化对象.

Muh*_*hir 5

list.remove似乎是最快的方式,列表理解是第二快的filter,最后.

下面是timeit结果

In: python -m timeit '[x for x in [1,2,3,4,5] if x not in [4]]'
Out: 1000000 loops, best of 3: 0.285 usec per loop

In: python -m timeit '[x for x in [1,2,3,4,5] if x != 4]'
Out: 1000000 loops, best of 3: 0.254 usec per loop

In: python -m timeit 'filter(lambda x: x not in [4], [1,2,3,4,5])'
Out: 1000000 loops, best of 3: 0.577 usec per loop

In: python -m timeit 'filter(lambda x: x != 4, [1,2,3,4,5])'
Out: 1000000 loops, best of 3: 0.569 usec per loop

In: python -m timeit '[1,2,3,4,5].remove(4)'
Out: 10000000 loops, best of 3: 0.132 usec per loop
Run Code Online (Sandbox Code Playgroud)

  • 你删除的结果太乐观了,因为你应该添加一个`try except`来捕获一个可能的`ValueError`.但我同意你的看法仍然是最好的方式 - 如果OP希望更改原始列表,因为其他方法会构建副本. (2认同)