6
私は英語の単語が含まれています(1,000,000項目以上)大規模なリストを持っていますフィルター項目
tokens_once = set(word for word in set(tokens) if tokens.count(word) == 1)
をそれは本当に遅いです:リスト
に今私が使用しています。これをもっと速くするにはどうすればいいですか?
私は英語の単語が含まれています(1,000,000項目以上)大規模なリストを持っていますフィルター項目
tokens_once = set(word for word in set(tokens) if tokens.count(word) == 1)
をそれは本当に遅いです:リスト
に今私が使用しています。これをもっと速くするにはどうすればいいですか?
あなたはリストを反復処理し、次に各要素に対して再度O(N²)を行います。 count
をCounter
に置き換えた場合は、リスト上で一度反復してから、ユニークな要素のリストをもう一度繰り返します。最悪の場合、O(2N)、つまりO(N)になります。
from collections import Counter
tokens = ["today", "good", "computer", "people", "good"]
single_tokens = [k for k, v in Counter(tokens).iteritems() if v == 1 ]
# single_tokens == ['today', 'computer', 'people']
Python 3では、 'iteritems'の名前が' items'に変更されました。 –