Имам колекция от няколко хиляди низа (ДНК последователности). Искам да намаля това до няколко стотин (точният брой не е критичен), като изключа последователности, които са много сходни.
Мога да направя това чрез съпоставяне с помощта на модула "Levenshtein". Работи, но е доста бавно и съм почти сигурен, че трябва да има много по-бърз начин. Кодът тук е същият подход, но приложен към думи, за да бъде по-тестваем; за мен с това прекъсване отнема около 10 секунди и събира ~1000 думи.
import Levenshtein as lev
import random
f = open("/usr/share/dict/words", 'r')
txt = f.read().splitlines()
f.close()
cutoff = .5
collected = []
while len(txt) > 0:
a = random.choice(txt)
collected.append(a)
txt = filter( lambda b: lev.ratio(a,b) < cutoff, txt)
Опитах няколко различни варианта и някои други съвпадащи модули (Mellyfish), без да стана значително по-бърз.