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
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