Python 删除重复项(不使用set)

Python 删除重复项(不使用set),python,python-2.7,no-duplicates,Python,Python 2.7,No Duplicates,我的数据如下所示: let = ['a', 'b', 'a', 'c', 'a'] ['b', 'c'] 如何删除重复项?我希望我的输出是这样的: let = ['a', 'b', 'a', 'c', 'a'] ['b', 'c'] 当我使用set函数时,我得到: set(['a', 'c', 'b']) 这不是我想要的。一个选项是从Ritesh Kumar的答案中推导出来的 试试这个 >>> let ['a', 'b', 'a', 'c', 'a'] >>

我的数据如下所示:

let = ['a', 'b', 'a', 'c', 'a']
['b', 'c']
如何删除重复项?我希望我的输出是这样的:

let = ['a', 'b', 'a', 'c', 'a']
['b', 'c']
当我使用set函数时,我得到:

set(['a', 'c', 'b'])

这不是我想要的。

一个选项是从Ritesh Kumar的答案中推导出来的

试试这个

>>> let
['a', 'b', 'a', 'c', 'a']
>>> dict.fromkeys(let).keys()
['a', 'c', 'b']
>>> 

对输入进行排序,然后删除重复项变得很简单:

data = ['a', 'b', 'a', 'c', 'a']

def uniq(data):
  last = None
  result = []
  for item in data:
    if item != last:
      result.append(item)
      last = item
  return result

print uniq(sorted(data))
# prints ['a', 'b', 'c']
这基本上就是shell的cat数据| sort | uniq习惯用法。
成本在*logn上,与基于树的集合相同。

而不是排序,或者每次线性扫描并重新计算主列表的出现次数

计算出现次数,然后筛选出现一次的项目

>>> from collections import Counter
>>> let = ['a', 'b', 'a', 'c', 'a']
>>> [k for k, v in Counter(let).items() if v == 1]
['c', 'b']
不管怎样,你必须至少看一次序列——尽管限制这样做的次数是有意义的

如果您确实希望避免使用任何类型、集合或散列容器,因为您可能无法使用它们,那么可以对其进行排序,然后使用:

>>> from itertools import groupby, islice
>>> [k for k,v in groupby(sorted(let)) if len(list(islice(v, 2))) == 1]
['b', 'c']

用什么语言?编辑您的问题并将其添加到tags@michnguyen你必须对你想要完成的事情做更多的澄清,因为如果是这样的话,它似乎不仅仅是删除重复项,然后结果中会包含“a”。这基本上是在伪装中使用一个集合。每次运行let.count都相当繁重。例如:这会对let进行25次线性扫描。可以进行排序/分组,也可以进行一次线性频率计数,这样可以减少密钥空间,然后迭代该密钥空间。。。对于后者,更糟糕的情况是2N