从unified_diff输出恢复列表
我需要生成两个字符串数组之间的差异:
a=['1','2']
b=['1','2','3']
为此,我正在使用Python中的difflib库(2.6版本):
c=difflib.unified_diff(a,b)
我保存了内容
d=list(c)
内容大概是这样的:
['--- \n', '+++ \n', '@@ -1,2 +1,3 @@\n', ' 1', ' 2', '+3']
我该如何利用unified_diff函数的输出,从第一个数组构建第二个数组呢?
我想要的效果是这样的:
>>> merge(a,d)
>>> ['1','2','3']
附注:这个数组可以有重复的条目,而且每个条目出现的顺序对我的应用程序很重要。此外,从一次迭代到另一迭代,数组中间或开头可能会有变化,也可能在末尾添加新的条目。
1 个回答
2
我不确定我的例子是不是好的写法,但你可以试试这样的方式:
from collections import Counter
a=['1','2']
b=['1','2','3']
a.extend(b)
[k for k,v in Counter(a).items() if v == 1]
或者,如果你的列表里只能有唯一的项目:
list(set(a) ^ set(b))
或者:
missed_in_a = [x for x in a if x not in b]
missed_in_b = [x for x in b if x not in a]
或者:
a=['1','2']
b=['1','2','3']
c = [x for x in a]
c.extend(b)
diff = [x for x in c if a.count(x)+b.count(x) == 1]
最后一个(希望我理解你的意思,抱歉如果理解错了):
a = ['1','2','3','4']
b = ['2','2','3','6','5']
from difflib import unified_diff
def merge(a,b):
output = []
for line in list(unified_diff(a,b))[3:]:
if '+' in line:
output.append(line.strip('+'))
elif not '-' in line:
output.append(line.strip())
return output
print merge(a,b)