尝试在两个字符串中查找匹配项-Python
我让一个用户输入两个字符串,然后我想检查是否有任何相似的字符,如果有,获取第一个相似出现的位置,而不使用find或index函数 以下是我到目前为止的情况,但我还没有完全工作。根据我目前所掌握的,我能够找到相似之处,但我不知道如何在不使用索引函数的情况下找到这些相似之处的位置尝试在两个字符串中查找匹配项-Python,python,python-3.x,Python,Python 3.x,我让一个用户输入两个字符串,然后我想检查是否有任何相似的字符,如果有,获取第一个相似出现的位置,而不使用find或index函数 以下是我到目前为止的情况,但我还没有完全工作。根据我目前所掌握的,我能够找到相似之处,但我不知道如何在不使用索引函数的情况下找到这些相似之处的位置 string_a = "python" string_b = "honbe" same = [] a_len = len(string_a) b_len = len(string_b) for a in strin
string_a = "python"
string_b = "honbe"
same = []
a_len = len(string_a)
b_len = len(string_b)
for a in string_a:
for b in string_b:
if a == b:
same.append(b)
print (same)
现在的输出是:
['h', 'o', 'n']
因此,基本上我要问的是,如何在不使用Python索引函数的情况下找到这些字符的位置?您应该迭代索引:
for i in range(len(string_a)):
for j in range(len(string_b)):
if string_a[i] == string_b[j]:
same.append((i, j, string_b[j]))
这将创建一个元组列表,如下所示:
[ (3, 0, "h"), ... ]
如果需要所有匹配项,而不仅仅是第一个匹配项,可以使用yield
语句替换return
语句,并迭代结果,或者简单地执行以下操作:
matches=list(查找相似性(字符串a、字符串b))
在后一种情况下,您会得到:
list(find_similarity(string_a, string_b))
=> [(3, 0, 'h'), (4, 1, 'o'), (5, 2, 'n')]
这是一个完美的用例:
match
对象将具有属性a
、b
和size
,其中a
是字符串matcher的起始索引。a
,b
是matcher.b
的起始索引,而size
是匹配的长度
例如:
>>> match
Match(a=3, b=0, size=3)
>>> matcher.a[match.a:match.a+match.size]
'hon'
>>> match.a
3
>>> match.b
0
您可以使用列表理解和itertools的组合来解决此问题
import itertools
string_a = 'hello_world'
string_b = 'hi_low_old'
same = [ i for i,x in enumerate(itertools.izip(string_a,string_b)) if all(y==x[0] for y in x)]
In [38]: same
Out[38]: [0, 3, 4, 7]
这里我们逐个元素比较这两个字符串,并返回所有发现相似的索引。输出可以很容易地更改为包含匹配的字符等。此方法可以很容易地进行缩放以比较多个单词。如果您只需要在Python 3.x中查找字母重叠的索引,您可以这样做:
str_a = "Python is a great language"
str_b = "languages express meaning"
result = [i for i, (a, b) in enumerate(zip(str_a, str_b)) if a == b]
输出
[8, 9, 13, 14, 17, 24]
简单又聪明。嘿,有没有办法知道比赛的次数?
str_a = "Python is a great language"
str_b = "languages express meaning"
result = [i for i, (a, b) in enumerate(zip(str_a, str_b)) if a == b]
[8, 9, 13, 14, 17, 24]