Как вы пояснили, вы хотите найти разницу между двумя строками по символам с их позициями , вы можете сделать следующее:
- Перебирать список один за другим.
- Для каждого слова в списке сравните его с предоставленным строковым символом за символом.
- Если символ из одного не совпадает с другим, увеличьте счетчик различий.
- Если разница становится больше необходимой разницы, вернуть
False
, иначе вернуть True
. - Имейте в виду, что две сравниваемые строки могут иметь разную длину. Учитывайте это при их расчете.
Фрагмент:
def isSame(str_list,s,diff_offset):
s_len = len(s)
for each_s in str_list:
diff = abs(len(each_s) - s_len) # initialize with difference of string length
length = min(len(each_s),s_len)
for i in range(0,length):
if s[i] != each_s[i]:
diff = diff + 1
if diff > diff_offset:
return False # if difference is more than required, then return false
return True
print(isSame(["ccat","hpat","ppat"], "ppat", 2))
print(isSame(["ccat","hpat","ppatru"], "ppat", 2))
print(isSame(["ccat","hpat","that"], "ppat", 1))
Обновление:
Как согласно формулировке задачи, если длины не совпадают, просто верните False перед началом сравнения строк char по char.
def isSame(str_list,s,diff_offset):
s_len = len(s)
for each_s in str_list:
if len(each_s) != s_len:
return False
diff = 0
for i in range(0,s_len):
if s[i] != each_s[i]:
diff = diff + 1
if diff > diff_offset:
return False # if difference is more than required, then return false
return True
print(isSame(["ccat","hpat","ppat"], "ppat", 2))
print(isSame(["ccat","hpat","ppatru"], "ppat", 2))
print(isSame(["ccat","hpat","that"], "ppat", 1))