Форум сайта python.su
Всем привет!
В цикле получается последовательность из интовых 1 и 0, которая записывается в строку. И таких строк 2 Собственно, вопрос в том, как наиболее правильно (Python way) будет найти расстояние Хэмминга (то есть количество попарно различных символов).
Пока это решается примерно так (hash_original и hash_to_check - строки):
for i in range(len(hash_to_check)): if hash_to_check[i] != hash_original[i]: diff_sym += 1
Офлайн
Есть один надежный способ определения говнокода в питоне. Если у Вас есть конструкция
range(len(...))
sum(1 for x,y in zip(hash_to_check, hash_original) if x!= y)
len((set(hash_to_check).difference(set(hash_original))))
Офлайн
FishHook
Прочитал про zip, map и lambda. Круто, спасибо! А второй вариант не подходит, потому что подсчитывает различия в алфавите строк, если я правильно понял. Так как обе строки содержат нули и единицы, то
len((set(hash_to_check).difference(set(hash_original))))
Отредактировано valentjedi (Май 4, 2014 13:57:13)
Офлайн
valentjediПитон больше язык для быстрого прототипирования приложения. Если хотите быстро то.
не будет быстрее и не имеет смысла?
Офлайн
doza_and
Нет-нет, все не так критично, просто интересно. Но за готовый модуль спасибо.
Офлайн
>>> def f(s1, s2): ... assert len(s1) == len(s2) ... return sum(i != j for i, j in zip(s1, s2)) ... >>> f('abaaaba', 'abbabba') 2 >>>
Отредактировано py.user.next (Май 4, 2014 22:38:50)
Офлайн