给出一个字符串列表(我不知道列表),我想删除重复的原始单词。
例如:
lst = ['a', 'b', 'c', 'c', 'c', 'd', 'e', 'e']
输出应该删除重复项
像这样['a', 'b', 'd']
我不需要保留订单。
答案 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 == 1
与if 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
我没有翻译,但逻辑似乎很合理。