Filtrar elementos que solo aparecen una vez en una lista muy grande

Tengo una lista grande (más de 1,000,000 de artículos), que contiene palabras en inglés:

tokens = ["today", "good", "computer", "people", "good", ... ] 

Me gustaría obtener todos los elementos que aparecen solo una vez en la lista.

ahora estoy usando:

 tokens_once = set(word for word in set(tokens) if tokens.count(word) == 1) 

pero es muy lento ¿Cómo podría hacer esto más rápido?

Usted itera sobre una lista y luego, para cada elemento, lo hace de nuevo, lo que lo hace O (N²). Si reemplaza su count por un Counter , itere una vez sobre la lista y luego una vez más sobre la lista de elementos únicos, lo que lo hace, en el peor de los casos, O (2N), es decir, 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']