Создать хэш или набор или использовать collection.Counter () .
Когда вы сталкиваетесь с каждой строкой / проверкой ввода, чтобы увидеть, есть ли экземпляр этого в хэше. Если это так, то это дубликат (делайте с ним что хотите). В противном случае добавьте значение (например, ну, скажем, цифра) к хешу, используя строку в качестве ключа.
Пример (с использованием Python collection.Counter):
#!python
import collections
counts = collections.Counter(mylist)
uniq = [i for i,c in counts.iteritems() if c==1]
dupes = [i for i, c in counts.iteritems() if c>1]
Эти счетчики построены вокруг словарей (имя Pythons для коллекций хэшированных карт).
Это эффективно по времени, потому что хэш-ключи проиндексированы. В большинстве случаев время поиска и вставки ключей выполняется почти постоянно. (На самом деле Perl-хэши называются так называемыми, потому что они реализованы с использованием алгоритмического трюка, называемого «хеширование» - своего рода контрольная сумма, выбранная из-за крайне низкой вероятности коллизии при подаче произвольных входных данных).
Если вы инициализируете значения целыми числами, начиная с 1, то вы можете увеличивать каждое значение, когда вы найдете его ключ в хэше. Это почти самый эффективный способ подсчета строк общего назначения.