Python:如何从列表中删除重复项并按顺序打印出新列表

时间:2016-01-27 12:46:15

标签: python list duplicates

基本上,我有一个包含以下单词的列表

['ask', 'not', 'what', 'your', 'country', 'can', 'do', 'for', 'you', 'ask', 'what', 'you', 'can', 'do', 'for', 'your', 'country'] 

(这是我老师给我的例子,非常适合测试)。

我想弄清楚如何删除任何重复项并打印出没有重复项的新列表,因此输出应为

['ask', 'not', 'what', 'your', 'country', 'can', 'do', 'for', 'you'] 

在最初尝试使用set()之后,我设法删除了重复项,但它只是以随机顺序打印出句子,这非常麻烦。

这是我的代码:

sentence = input('Please enter a sentence. No punctuation may be included: enter code here').lower().split()
print('This is your sentence:', sentence)
no_duplicates = list(set(sentence))
print('This is your sentence without duplicates', no_duplicates)

顺便说一下,如果你没注意到,我仍然是编码的新手,所以尽量保持你的答案简单,这样我才能理解你在说什么。

2 个答案:

答案 0 :(得分:0)

集合不是随机的,但它们是无序的。这意味着您不能在用例中使用它们,因为顺序在此任务中非常重要。

但是,使用集合有一个简单的解决方案。由于这是作业,我不会给你代码,但算法是从一个空集开始,然后遍历每个单词,检查它是否已经在集合中:如果它不是,将它添加到设置并输出到输出列表,否则跳过它。

答案 1 :(得分:0)

为什么不使用OrderedDict

>>> lst=['ask', 'not', 'what', 'your', 'country', 'can', 'do', 'for', 'you', 'ask', 'what', 'you', 'can', 'do', 'for', 'your', 'country']
>>> from collections import OrderedDict
>>> [k for k in OrderedDict((el,0) for el in lst)]
['ask', 'not', 'what', 'your', 'country', 'can', 'do', 'for', 'you']