可能重复:
How to check if my list has an item from another list(dictionary)?
这实际上是一个标记的作业。
程序用户必须写下句子。比程序检查单词并打印错误的单词(如果错误单词出现多次,程序必须只打印一次)。必须按照它们出现在句子中的顺序打印错误的单词。
我是这样做的。但是有一个问题。由于内置函数已排序,错误的单词不会按照它们在句子中的相同顺序执行。是否有其他方法可以删除列表中的重复项?
字典是从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)
答案 0 :(得分:2)
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)
答案 1 :(得分:1)
要删除列表中的重复项,请将它们添加到字典中。字典只有1个KEY:VALUE对。
答案 2 :(得分:0)
您可以使用OrderedSet recipe。
@edit:BTW如果字典很大那么最好将字典列表转换成一个集合 - 检查集合中元素的存在需要恒定的时间,而不是列表中的O(n)。
答案 3 :(得分:0)
你应该检查这个答案:
https://stackoverflow.com/a/7961425/1225541
如果您使用他的方法并停止对words
数组进行排序(删除words=sorted(set(words))
行),它应该按预期执行。