我需要循环遍历文件的n行,并为i
和1
之间的任何n-1
循环,以获得line(n-1) - line(n)
的单词之间的差异(例如{{ 1}}等..)
输入:
line[i]word[j] - line[i+1]word[j]
输出:
Hey there !
Hey thre !
What a suprise.
What a uprise.
I don't know what to do.
I don't know wt to do.
目标是仅提取两个连续行词之间的丢失字符。
我是python的新手,所以如果您能指导我编写代码,我将不胜感激。
答案 0 :(得分:-1)
没有任何库:
def extract_missing_chars(s1, s2):
if len(s1) < len(s2):
return extract_missing_chars(s2, s1)
i = 0
to_return = []
for c in s1:
if s2[i] != c:
to_return.append(c)
else:
i += 1
return to_return
f = open('testfile')
l1 = f.readline()
while l1:
l2 = f.readline()
print(''.join(extract_missing_chars(l1, l2)))
l1 = f.readline()
答案 1 :(得分:-1)
您的示例表明您要对线对进行比较。这与将其定义为line(n-1)-line(n)不同,后者将为您提供5个结果,而不是3个。
结果还取决于您认为与众不同之处。是位置性的,还是仅基于奇数行中丢失的字母,还是两个方向都适用的差异?
(例如“ boat”-“ tub” =“ boat”,“ oa”或“ oau”?)。
您还必须决定是否要使差异区分大小写。
在此示例中,差异的计算集中在一个函数中,以便您可以更轻松地更改规则。假定“ boat”-“ tub” =“ oau”。
lines = """Hey there !
Hey thre !
What a suprise.
What a uprise.
I don't know what to do.
I don't know wt to do.
""".split('\n')
def differences(word1,word2):
if isinstance(word1,list):
return "".join( differences(w1,w2) for w1,w2 in zip(word1+[""]*len(word2),word2+[""]*len(word1)) )
return "".join( c*abs(word1.count(c)-word2.count(c)) for c in set(word1+word2) )
result = [ differences(line1.split(),line2.split()) for line1,line2 in zip(lines[::2],lines[1::2]) ]
# ['e', 's', 'ha']
请注意,result
的行处理基于您的示例(而不是您的定义)。