Я пытаюсь вычислить количество символов, которые отличаются между двумя строками в python. В идеале я хочу функцию как strdif в C. Я вижу ndiff в difflib python, но возвращает объект Differ, тогда как я хочу простое целое число (например: «10011» и «00110» возвращает 3). Я знаю, что ответ должен быть простым, но я не могу понять это и Id, а использовать библиотечную функцию вместо того, чтобы написать это самРасчет разницы строк в python
ответ
s1,s2 = "10011", "00110"
print sum(a!=b for a,b in zip(s1,s2)) + abs(len(s1)-len(s2))
должен работать нормально.
или как Джон Клементс указывает
print sum(a!=b for a,b in map(None,s1,s2))
, который позволяет обойтись без дополнительной длины чек ... и будет немного быстрее, если строки, как правило, такой же длины (и его удивительным решением!) ...
или еще более кратким (теперь он начинает проникать в землю черной магии, где теряется достаточное понимание читателя, что я, вероятно, не рекомендую реально реализовать его так, как это во всем, что может быть замечено другими, и если вы действительно добавить много комментариев)
from operator import ne
print sum(map(ne, s1, s2))
Если Python 2.x вы можете (ab) использовать 'map', например:' sum (a! = B для a, b на карте (None, s1, s2)) ', чтобы избежать дополнительной' len', или использовать 'sum (a! = b для a, b в izip_longest (s1, s2, fillvalue = ''))' в качестве альтернативы –
@JonClements: '+ abs (len (s1) -len (s2))' избегает ненужной итерации когда длины строк различаются. –
Хех оба хороших момента ... хотя я подозреваю, что длины будут, как правило, такими же ... –
Hi Noah. Подумайте о том, чтобы взять [тур] (http://stackoverflow.com/tour), чтобы получить представление о том, как отформатировать ваши вопросы для достижения наилучших результатов. Возможно, вы должны дать свою проблему выстрелу и (потенциально) задать вопрос, когда вы столкнетесь с конкретной проблемой. – RyPope