从列表中删除重复和原始 - python

时间:2014-11-06 22:20:52

标签: python list duplicates

给出一个字符串列表(我不知道列表),我想删除重复的原始单词。

例如:

lst = ['a', 'b', 'c', 'c', 'c', 'd', 'e', 'e']

输出应该删除重复项 像这样['a', 'b', 'd']

我不需要保留订单。

5 个答案:

答案 0 :(得分:3)

使用collections.Counter() object,然后只保留计数为1的值:

from collections import counter

[k for k, v in Counter(lst).items() if v == 1]

这是O(N)算法;你只需要遍历N个项目的列表一次,然后在更少的项目(< N)上循环第二个循环以提取那些只出现一次的值。

如果订单很重要并且您使用的是Python< 3.6,分开步骤:

counts = Counter(lst)
[k for k in lst if counts[k] == 1]

演示:

>>> from collections import Counter
>>> lst = ['a', 'b', 'c', 'c', 'c', 'd', 'e', 'e']
>>> [k for k, v in Counter(lst).items() if v == 1]
['a', 'b', 'd']
>>> counts = Counter(lst)
>>> [k for k in lst if counts[k] == 1]
['a', 'b', 'd']

两种方法的顺序相同是巧合;对于Python 3.6之前的Python版本,其他输入可能会导致不同的顺序。

在Python 3.6中,字典的实现发生了变化,现在保留了输入顺序。

答案 1 :(得分:1)

t = ['a', 'b', 'c', 'c', 'c', 'd', 'e', 'e']
print [a for a in t if t.count(a) == 1]

答案 2 :(得分:1)

lst = ['a', 'b', 'c', 'c', 'c', 'd', 'e', 'e']
from collections import Counter
c = Counter(lst)
print([k for k,v in c.items() if v == 1 ])

collections.Counter会计算每个元素的出现次数,我们保留count/value is == 1if v == 1

的元素

答案 3 :(得分:0)

<强> @Padraic:

如果您的列表是:

lst = ['a', 'b', 'c', 'c', 'c', 'd', 'e', 'e']

然后

list(set(lst))

将返回以下内容:

['a', 'c', 'b', 'e', 'd']

这不是adhankar想要的东西..

完全过滤所有重复项可以通过列表理解轻松完成:

[item for item in lst if lst.count(item) == 1]

这个的输出是:

['a', 'b', 'd']

item 代表列表 lst 中的每个项目,但如果 lst.count(item),它只会附加到新列表中等于1,确保该项仅在原始列表 lst 中存在一次。

查找列表理解以获取更多信息:Python list comprehension documentation

答案 4 :(得分:-1)

您可以创建一个辅助空列表,只附加尚未包含在其中的项目。

oldList = ['a', 'b', 'c', 'c', 'c', 'd', 'e', 'e']
newList = []
for item in oldList:
    if item not in newList:
        newList.append(item)
print newList

我没有翻译,但逻辑似乎很合理。