Python文档比较-返回不在其他文档中的所有单词 - python

我正在尝试创建一个“翻译比较”程序,该程序读取和比较两个文档,然后在一个文档中返回所有不在另一个文档中的单词。现在,我的程序仅返回“ file1”中单词的第一个实例,而不是“ file2”中的单词。这是针对初学者的,所以我试图避免使用晦涩的内部方法,即使这意味着效率较低的代码。这是我到目前为止所拥有的...

def translation_comparison():
   import re
   file1 = open("Desktop/file1.txt","r")
   file2 = open("Desktop/file2.txt","r")
   text1 = file1.read()
   text2 = file2.read()
   text1 = re.findall(r'\w+',text1)
   text2 = re.findall(r'\w+',text2)
   for item in text2:
       if item not in text1:
           return item  

python大神给出的解决方案

您可以执行以下操作:

def translation_comparison():
   import re
   file1 = open("text1.txt","r")
   file2 = open("text2.txt","r")
   text1 = file1.read()
   text2 = file2.read()
   text1 = re.findall(r'\w+',text1)
   text2 = re.findall(r'\w+',text2)
   # added lines below
   text1 = list(set(text1))
   text2 = list(set(text2))
   for word in text2:
    if word in text1:
        text1.remove(word)
   return text1

看一下我的评论。我们首先获取每个文档中单词列表的集合。这样就给我们留下了唯一单词的列表,以防万一有重复。接下来,我们遍历第二个文本中的每个单词,如果该单词也存在于第一个文本中,则将其从第一个文本中的单词列表中删除。最后,我们将只剩下text1中的单词,而text2中也没有。我们在最后返回该列表,其中包含所有这些单词。

让我知道这是否有意义,或者您有任何疑问。

编辑:根据来自@blckknght的建议,一种更简单的方法是使用集减法,如下所示:

def translation_comparison():
   import re
   file1 = open("text1.txt","r")
   file2 = open("text2.txt","r")
   text1 = file1.read()
   text2 = file2.read()
   text1 = re.findall(r'\w+',text1)
   text2 = re.findall(r'\w+',text2)
   return list(set(text1) - set(text2))

另请注意,这会将同一单词的大写字母区别对待(例如:Thethe)作为单独的单词。尽管使用基本列表理解可以轻松解决此问题:text1 = [x.lower() for x in text1]text2 = [x.lower() for x in text2]