2016-05-10 2 views
0

Итак, мне нужно выяснить, какая программа при вводе 2 разных строк одинаковой длины вернет НЕ распечатать количество различий между двумя строками. Важен порядок символов.Сравните 2 строки в Python

Например, если вы вводите ("abcdef", "aabccf") он должен вернуть 4.

("abcdef", "accddf") должен вернуться 2.

Все, что я до сих пор:

Защиту differencecount (A, B): счетчик = 0 str1 = список (A) str2 = список (B) для буквы в str1: если буква == str2: counter = counter + 1 счетчик возврата

Все это делает возврат 0, хотя я чувствую, что что-то упускаю.

+0

Что произойдет, если x и y - разные длины? Каков ожидаемый результат? –

+0

Я думал о добавлении len (x) = len (y), чтобы убедиться, что они равны по длине. Если они не равны по длине, я, вероятно, добавлю печать «Пожалуйста, введите строки равной длины» в конце. – Pichu2016

ответ

2

Я хотел бы использовать

def difference(word_one, word_two): 
    return sum(l1 != l2 for l1, l2 in zip(word_one, word_two)) 

Который работает как

>>> difference('abcdef', 'abcdef') 
0 
>>> difference('abcdef', 'abcabc') 
3 
+0

Не уверен, что это хорошая домашняя работа для этого человека:/ – Ownaginatious

+0

Я никогда не узнал, что такое почтовый индекс. Я не знаю, как это работает. – Pichu2016

1

Вы можете zip строки вместе, а затем подсчитать, сколько различных пар есть:

def chardifferencecounter(x, y): 
    return len([1 for c1, c2 in zip(x, y) if c1 != c2]) 

>>> chardifferencecounter('abcdef', 'aabccf') 
4 
>>> chardifferencecounter('abcdef', 'accddf') 
2 

Объяснение:

Архивирование струны вместе производит это:

>>> s1 = 'abcdef' 
>>> s2 = 'aabccf' 
>>> zip(s1, s2) 
[('a', 'a'), ('b', 'a'), ('c', 'b'), ('d', 'c'), ('e', 'c'), ('f', 'f')] 

поэтому она принимает характер из одной и той же позиции в каждой строке и пар их вместе. Поэтому вам просто нужно подсчитать, сколько пар разных. Это можно сделать, используя понимание списка, чтобы создать список с теми же парами, которые были отфильтрованы, а затем получить длину этого списка.

+0

Я никогда не узнал, что такое zip .. как это работает? – Pichu2016

+2

@ Pichu2016: Разве я уже не объяснил это в ответе? Подробнее см. [Документация] (https://docs.python.org/3/library/functions.html#zip). – mhawke

0

Просто для различного взгляда здесь это решение, которое не использует zip или enumerate:

def chardifferencecounter(x,y): 
    if len(x) != len(y): 
     raise Exception('Please enter strings of equal length') 
    return sum(x[i] != y[i] for i in range(len(x))) 

Обратите внимание, что это решение также вызывает исключение при x и y имеют разную длину, которая является то, что вы хотел в вашем комментарии.

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