使用循环从列表中查找所有唯一的单词

新手上路,请多包涵

我正在尝试根据从文本文件中获取的所有单词列表制作一个唯一单词列表。我唯一的问题是用于迭代两个列表的算法。

 def getUniqueWords(allWords):
    uniqueWords = []
    uniqueWords.append(allWords[0])
    for i in range(len(allWords)):
        for j in range(len(uniqueWords)):
            if allWords[i] == uniqueWords[j]:
                pass
            else:
                uniqueWords.append(allWords[i])
                print uniqueWords[j]
    print uniqueWords
    return uniqueWords

如您所见,我创建了一个空列表并开始遍历两个列表。另外,我附加了列表中的第一项,因为出于某种原因它不会尝试匹配我假设的词。毕竟,在一个空列表中,list[0] 是不存在的。如果有人能帮我弄清楚如何正确地迭代这个,这样我就可以生成一个很棒的单词列表。

print uniqueWords[j] 只是为了调试所以我可以看到在列表处理过程中出现了什么

原文由 impactblu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 459
2 个回答

我不是 python 专家,但认为这应该有效:

 uniqueWords = []
for i in allWords:
      if not i in uniqueWords:
          uniqueWords.append(i);

return uniqueWords

编辑:

我测试过它有效,它只返回列表中的唯一单词:

 def getUniqueWords(allWords) :
    uniqueWords = []
    for i in allWords:
        if not i in uniqueWords:
            uniqueWords.append(i)
    return uniqueWords

print getUniqueWords(['a','b','c','a','b']);

[‘a’, ‘b’, ‘c’]

原文由 fabio 发布,翻译遵循 CC BY-SA 3.0 许可协议

我不喜欢(试图)要求你选择糟糕算法的家庭作业问题。更好的选择是使用 settrie 例如。

您可以通过 2 个小的更改来修复您的程序

def getUniqueWords(allWords):
    uniqueWords = []
    uniqueWords.append(allWords[0])
    for i in range(len(allWords)):
        for j in range(len(uniqueWords)):
            if allWords[i] == uniqueWords[j]:
                break
        else:
            uniqueWords.append(allWords[i])
            print uniqueWords[j]
    print uniqueWords
    return uniqueWords

首先,当您看到单词已经存在时,您需要停止循环

        for j in range(len(uniqueWords)):
            if allWords[i] == uniqueWords[j]:
                break  # break out of the loop since you found a match

第二个是使用 for / else 构造而不是 if / else

         for j in range(len(uniqueWords)):
            if allWords[i] == uniqueWords[j]:
                break
        else:
            uniqueWords.append(allWords[i])
            print uniqueWords[j]

原文由 John La Rooy 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题