Python作业 - 比较列表

时间:2012-10-21 09:56:04

标签: python list

  

可能重复:
  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)

4 个答案:

答案 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))行),它应该按预期执行。