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

基本的に、重複したエントリを削除したいので、ここにいくつかの答えがあります:

最初のインスタンスが見つかるとクエリが実行されるため、inas against を使用すると少し速くなるはずです。count()

于 2013-09-21T20:13:08.460 に答える