Python作业-比较列表

Python作业-比较列表,python,list,Python,List,可能重复: 这实际上是一个分数的家庭作业 程序的使用者必须把句子写下来。Than程序检查单词并打印错误的单词(如果错误单词出现多次,程序必须只打印一次)。错误的单词必须按它们在句子中出现的顺序打印出来 我是这样做的。但有一个问题。错误的单词在句子中出现的顺序不一样,这是因为内置的功能。是否有其他方法删除列表中的重复项 字典是从dictionary.txt导入的 sentence=input("Sentence:") dictionary=open("dictionary.txt", encod

可能重复:

这实际上是一个分数的家庭作业

程序的使用者必须把句子写下来。Than程序检查单词并打印错误的单词(如果错误单词出现多次,程序必须只打印一次)。错误的单词必须按它们在句子中出现的顺序打印出来

我是这样做的。但有一个问题。错误的单词在句子中出现的顺序不一样,这是因为内置的功能。是否有其他方法删除列表中的重复项

字典是从dictionary.txt导入的

sentence=input("Sentence:")
dictionary=open("dictionary.txt", encoding="latin2").read().lower().split()
import re
words=re.findall("\w+",sentence.lower()) 

words=sorted(set(words)) 
sez=[]
for i in words:
     if i not in dictionary:
         sez.append(i)

print(sez)

要删除列表中的重复项,请将其添加到词典中。字典只有一个键:值对

words = filter(lambda index, item: words.index(item) == index, enumerate(words))
它将过滤掉每一份副本,并维持订单

正如托马斯指出的,这是一个相当沉重的方法。如果需要处理更多的单词,可以使用以下for循环:

dups = set()
filtered_list = []
for word in words:
    if not word in dups:
        filtered_list.append(word)
        dups.add(word)
你可以用


@编辑:顺便说一句,如果字典很大,那么最好将字典列表转换为一个集合——检查集合中某个元素的存在性需要恒定的时间,而不是在列表中使用O(n)。

您应该检查以下答案:


如果您使用他的方法并停止对
单词
数组排序(删除
单词=已排序(设置(单词))
行),它应该做您期望的事情。

besede定义在哪里?因为它不是for循环,为什么不“for word in words:”我刚刚编辑了它。现在应该可以了。+说到删除重复项,你已经有了这个问题的答案。为什么还要问?这不是python字典,而是从字典中导入的。txt@user1762790我说的是python中的字典。@user1762790帮个忙,发布你的dictionary.txt,让我们看看。@PrototypeStark字典是一个空格分隔的单词列表,也是一个O(n^2)算法,所以不要在少数输入词上使用这个。谢谢,我添加了一个更有效的for循环。