Форум сайта python.su
88
FishHookЧто это даст кроме затрат на вычисление хешей?
Что если попробовать хранить строки в словаре с ключом - хеш строки?
Офлайн
857
>>> import hashlib >>> >>> def gethash(s): ... return hashlib.md5(s.encode('utf-8')).hexdigest() ... >>> text = """ ... aa aa ... bb bb ... cc cc ... aa aa ... bb bb ... bb bb ... cc cc ... cc cc ... cc cc ... """ >>> >>> hst = set() >>> out = [] >>> >>> for i in text.splitlines(): ... h = gethash(i) ... if h not in hst: ... hst.add(h) ... out.append(i) ... >>> out ['', 'aa aa', 'bb bb', 'cc cc'] >>>
Отредактировано py.user.next (Июль 18, 2014 14:43:47)
Офлайн
568
ShamanА зачем их вычислять еще раз?
Что это даст кроме затрат на вычисление хешей?
file ="""Мама мыла раму Мама мыла раму Мама мыла Раму Мама мыла Рому Шла Саша по шоссе Шла Саша по шоссе""" unic = {hash(l): l for l in file.split("\n")} print (unic)
Офлайн
568
FishHookХеш вычисляется только один раз, а извлекается по нему очень быстро и без затратно.
Что это даст кроме затрат на вычисление хешей?
Офлайн
88
Высокая вероятность нарваться на коллизию.
Для ускорения можно ограничится заменой типа контейнера просмотренных со списка на множество и модифицировать алгоритм, если удаляются только серии повторений.
Офлайн
568
ShamanЧо????
Высокая вероятность нарваться на коллизию.
Офлайн
857
FishHook
Чо???
hash(...)
hash(object) -> integer
Return a hash value for the object. Two objects with the same value have
the same hash value. The reverse is not necessarily true, but likely.
FishHookunic = {hash(l): l for l in file.split("\n")}
FishHookА зачем там словарь? Подойдёт просто set(fin). Просто строк могут быть миллионы и все разные, да и порядок сохранить не мешало бы. Потому set() не подходит.
Хеш вычисляется только один раз, а извлекается по нему очень быстро и без затратно.
Офлайн