Python - 使用 difflib 按单词比较两个字符串并仅打印差异

Python - compare two string by words using difflib and print only difference

Python 这里是新手。我有以下代码使用 difflab 库比较两个字符串。 对于不同的词,输出以“+”、“-”为前缀。 如何只打印不带任何前缀的差异?

以下代码的预期输出是

不在第一个字符串中:Nvdia

不在第一个字符串中:IBM

不在第二个字符串中:Microsoft

不在第二个字符串中:Google

不在第二个字符串中:Oracle

Nvdia、IBM、微软、Google、甲骨文

import difflib

original = "Apple Microsoft Google Oracle"
edited = "Apple Nvdia IBM"

# initiate the Differ object
d = difflib.Differ()

# calculate the difference between the two texts
diff = d.compare(original.split(), edited.split())

# output the result
print ('\n'.join(diff))

谢谢!

如果您没有使用difflib,您可以使用set和字符串拆分!

>>> original = "Apple Microsoft Google Oracle"
>>> edited = "Apple Nvdia IBM"
>>> set(original.split()).symmetric_difference(set(edited.split()))
{'IBM', 'Google', 'Oracle', 'Microsoft', 'Nvdia'}

您还可以通过.intersection()

获取共享成员
>>> set(original.split()).intersection(set(edited.split()))
{'Apple'}

维基百科有一个关于基本集合运算的很好的部分,并附有维恩图
https://en.wikipedia.org/wiki/Set_(mathematics)#Basic_operations


但是,如果您必须使用 difflib(一些奇怪的环境或分配),您也可以找到每个带有 +- 前缀的成员并切掉所有前缀

>>> diff = d.compare(original.split(), edited.split())
>>> list(a[2:] for a in diff if a.startswith(("+", "-")))
['Nvdia', 'IBM', 'Microsoft', 'Google', 'Oracle']

所有这些操作都会产生可迭代的字符串,因此您可以 .join() 将它们放在一起或类似地获得单个结果,就像您在问题中所做的那样

>>> print("\n".join(result))
IBM
Google
Oracle
Microsoft
Nvdia