1

可能重复:
如何检查我的列表是否有来自另一个列表(字典)的项目?

这实际上是一个标记的作业。

程序的用户必须写下句子。然后程序检查单词并打印错误的单词(如果错误的单词出现不止一次,程序必须只打印一次)。错误的单词必须按照它们在句子中出现的顺序打印。

这是我的做法。但是有一个问题。由于内置函数 sorted,错误的单词不会按照它们在句子中出现的顺序出现。有没有其他方法可以删除列表中的重复项?

而且字典是从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

4 回答 4

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)
于 2012-10-21T10:04:47.727 回答
1

要删除列表中的重复项,请将它们添加到字典中。字典只有 1 个 KEY:VALUE 对。

于 2012-10-21T10:00:57.103 回答
0

您可以使用OrderedSet 配方

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

于 2012-10-21T10:08:35.853 回答
0

你应该检查这个答案:

https://stackoverflow.com/a/7961425/1225541

如果您使用他的方法并停止对words数组进行排序(删除该words=sorted(set(words))行),它应该符合您的预期。

于 2012-10-21T10:09:35.537 回答