Я предполагаю, что вы хотите, чтобы подстроки совпадали, только если они имеют одинаковую абсолютную позицию в своих соответствующих строках.Например, «abcd» и «bcde» не будут иметь совпадений, даже если оба содержат «bcd».
a = "address"
b = "oddness"
#matches[x] is True if a[x] == b[x]
matches = map(lambda x: x[0] == x[1], zip(list(a), list(b)))
positions = filter(lambda x: matches[x], range(len(a)))
substrings = filter(lambda x: x.find("_") == -1 and x != "","".join(map(lambda x: ["_", a[x]][matches[x]], range(len(a)))).split("_"))
позиции = [1, 2, 4, 5, 6]
подстроки = ['dd', 'ess']
Если вам нужны только подстроки, вы можете поместить их в одну строку:
filter(lambda x: x.find("_") == -1 and x != "","".join(map(lambda x: ["_", a[x]][map(lambda x: x[0] == x[1], zip(list(a), list(b)))[x]], range(len(a)))).split("_"))