我是python的新手,我需要一些有关difflib的帮助。我尝试阅读文档,但是对我来说,理解文档并不容易。
我想比较两个字符串,并且我希望输出只是两个字符串之间的匹配前缀部分(不打印差异)。
示例:
t1 = "hello my name is Tom"
t2 = "hello his name is Sawyer"
预期输出为:“你好”
我尝试了以下方法,但是输出不是我想要的,因为它将输出打印为数组,并且打印不仅匹配部分:
#!/usr/bin/python
import difflib
t1 = "hello my name is Tom"
t2 = "hello his name is Sawyer"
seq = difflib.Differ()
seq = seq.compare(t1,t2)
print list(seq)
其他示例2:
t1 = "20180628-153020"
t2 = "20180628-173020"
预期的输出打印输出: “ 20180628-1” 并且后缀“ 3020”即使字符串的两个部分都与位置和字符匹配,也应将其忽略。
请帮助我..谢谢...
我写了一个小代码,只得到两个字符串之间相似的前缀部分(没有使用takewhile
作为@Eugene的第一个答案),但是我认为@Eugene编写的第二个代码更短比我的效率高
这是我的代码:
def getprefix(s1, s2):
pref = ""
ls1 = list(s1)
ls2 = list(s2)
i=0
while i < len(ls1):
if ls1[i] not in ls2[i]:
return pref
pref += ls1[i]
i += 1
答案 0 :(得分:1)
In [1]: from itertools import takewhile
In [2]: ''.join(a for (a, b) in takewhile(lambda (a, b): a == b, zip(t1, t2)))
Out[2]: '20180628-1'
在这里,我们将两个字符串压缩在一起,并在它们的前缀相等的情况下对其进行迭代。
已更新。不使用itertools
的等效解决方案:
result = []
for a, b in zip(t1, t2):
if a != b:
break
result.append(a)
return ''.join(result)