我有一个很大的列表(超过 1,000,000 个项目),其中包含英语单词:
tokens = ["today", "good", "computer", "people", "good", ... ]
我想获取列表中仅出现一次的所有项目
现在我正在使用:
tokens_once = set(word for word in set(tokens) if tokens.count(word) == 1)
但它真的很慢。我怎样才能让它更快?
您迭代一个列表,然后对每个元素重复一次,这使得它的复杂度为 O(N²)。如果您更换您的count
by a 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']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)