1) Типы аргументов неизвестны. Примеров нет. Телепаты в отпуске.
2) Что делает этот код? Почему модифицируется список, по которому итерация? Зачем добавлять букву в этот же список?
Дмитрий Темников, я пока не увидел смысла привязываться к таймингу выполнения. Если топикстартеру надо однократно почистить файл за вменяемое время, то тайминг особого значения не имеет. 20 секунд против 2 секунд - это яйца выеденного не стоит. Тем более разменивать на читаемость кода.
longclaps, безусловно, set() имеет размер. Также безусловно не стоит решать проблему, которая не возникла. В одном из комментов я описал кучу способов сэкономить память.
longclaps, и что не так с choice(tuple(diff(a, b, c)))? В данном случае tuple() возникает из-за того, что choice() не принимает на вход set. Альтернативно можно использовать sample(..., k=1).
longclaps, ещё раз укажу на то, что в кэш складываются только значения title, а не строки целиком. И есть подозрение, что количество знаков в title очень ограничено.
Роман, если дубликатов много (т.е. кэш маленький), то нормально будет работать. Если нет - то можно подумать в сторону mmap и структур наподобие фильтра Блума (сам он в исходном виде не подойдёт ввиду вероятности ложноположительных срабатываний, но тут вопрос к топикстартеру - нужна ли 100% точность). Также можно перейти к типизированным данным (по сути title - это uint16/uint32 в виде строки) и массивам (сделать массив флагов длиной max_title, можно даже битовый массив). Также можно обрабатывать данные блоками и проходить по файлу в несколько итераций, постепенно уменьшая количество данных. В крайнем случае - сделать БД, применить методы BigData.
Дмитрий Темников, логично, split() и взятие элемента по индексу - это простые и быстрые операции. Но читаемость кода ухудшают. Думаю, что в этой задаче пара десятков секунд ничего не решает.
OctorberMyMonth, еще раз вам объясняю, в первой строке вы использовали имя класса list для имени переменной. Этого категорически нельзя делать. Для имени переменной используйте, например, lst.
2) Что делает этот код? Почему модифицируется список, по которому итерация? Зачем добавлять букву в этот же список?