Как я заметил в своем комментарии, вероятно, вас тормозит то, что вы последовательно проверяете каждую строку из sys.stdin
на принадлежность к вашему «основному» набору. Это будет очень, очень медленно и не позволит вам использовать скорость операций над множествами. Как пример:
#!/usr/bin/env python
import random
# create two million-element sets of random numbers
a = set(random.sample(xrange(10000000),1000000))
b = set(random.sample(xrange(10000000),1000000))
# a intersection b
c = a & b
# a difference c
d = list(a - c)
print "set d is all remaining elements in a not common to a intersection b"
print "length of d is %s" % len(d)
Вышеописанное выполняется за ~ 6 секунд на моем пятилетнем компьютере, и оно проверяет членство в больших наборах, чем вам требуется (если я вас неправильно не понял). Большая часть этого времени фактически уходит на создание сетов, поэтому у вас даже не будет таких накладных расходов. Тот факт, что строки, на которые вы ссылаетесь, является длинным, здесь не имеет значения; создание набора создает хеш-таблицу, как объяснил agf. Я подозреваю (хотя, опять же, это не ясно из вашего вопроса), что если вы сможете собрать все свои входные данные в набор до , то вы выполните какое-либо членское тестирование, это будет намного быстрее, чем чтение это по одному элементу за раз, затем проверка на членство в наборе