2

我正在寻找在 python 列表中不重复的项目。我目前的做法是,

python -mtimeit -s'l=[1,2,3,4,5,6,7,8,9]*99' '[x for x in l if l.count(x) == 1]'
100 loops, best of 3: 12.9 msec per loop

有没有可能做得更快?

这是输出。

>>> l = [1,2,3,4,5,6,7,8,9]*99+[10,11]
>>> [x for x in l if l.count(x) == 1]
[10, 11]
4

2 回答 2

3

您可以使用以下Counter课程collections

from collections import Counter
...
[item for item, count in Counter(l).items() if count == 1]

我的结果:

$ python -m timeit -s 'from collections import Counter; l = [1, 2, 3, 4, 5, 6, 7, 8, 9] * 99' '[item for item, count in Counter(l).items() if count == 1]'
1000 loops, best of 3: 366 usec per loop
$ python -mtimeit -s'l=[1,2,3,4,5,6,7,8,9]*99' '[x for x in l if l.count(x) == 1]'
10 loops, best of 3: 23.4 msec per loop
于 2013-09-21T20:10:40.967 回答
0

基本上你想删除重复的条目,所以这里有一些答案:

使用in而不是count()应该更快一些,因为一旦找到第一个实例,查询就完成了。

于 2013-09-21T20:13:08.460 回答