2014-09-11 2 views
-3

Я пытаюсь вычислить количество символов, которые отличаются между двумя строками в python. В идеале я хочу функцию как strdif в C. Я вижу ndiff в difflib python, но возвращает объект Differ, тогда как я хочу простое целое число (например: «10011» и «00110» возвращает 3). Я знаю, что ответ должен быть простым, но я не могу понять это и Id, а использовать библиотечную функцию вместо того, чтобы написать это самРасчет разницы строк в python

+1

Hi Noah. Подумайте о том, чтобы взять [тур] (http://stackoverflow.com/tour), чтобы получить представление о том, как отформатировать ваши вопросы для достижения наилучших результатов. Возможно, вы должны дать свою проблему выстрелу и (потенциально) задать вопрос, когда вы столкнетесь с конкретной проблемой. – RyPope

ответ

5
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)) 
+1

Если Python 2.x вы можете (ab) использовать 'map', например:' sum (a! = B для a, b на карте (None, s1, s2)) ', чтобы избежать дополнительной' len', или использовать 'sum (a! = b для a, b в izip_longest (s1, s2, fillvalue = ''))' в качестве альтернативы –

+1

@JonClements: '+ abs (len (s1) -len (s2))' избегает ненужной итерации когда длины строк различаются. –

+0

Хех оба хороших момента ... хотя я подозреваю, что длины будут, как правило, такими же ... –

 Смежные вопросы

  • Нет связанных вопросов^_^