从列表中删除重复项,包括原始匹配项

use*_*579 4 python list duplicates duplicate-removal

我尝试搜索并找不到这种确切的情况,所以如果它已经存在就道歉.

我正在尝试从列表中删除重复项以及我正在搜索的原始项目.如果我有这个:

ls = [1, 2, 3, 3]
Run Code Online (Sandbox Code Playgroud)

我想最终得到这个:

ls = [1, 2]
Run Code Online (Sandbox Code Playgroud)

我知道使用set会删除像这样的重复项:

print set(ls)  # set([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

但它仍然保留了3我想删除的元素.我想知道是否有办法删除重复项和原始匹配项.

iCo*_*dez 13

使用列表理解和list.count:

>>> ls = [1, 2, 3, 3]
>>> [x for x in ls if ls.count(x) == 1]
[1, 2]
>>>
Run Code Online (Sandbox Code Playgroud)

以下是对这两者的参考.


编辑:

@Anonymous在下面提出了一个很好的观点.上述解决方案适用于小型列表,但对于较大的列表可能会变慢.

对于大型列表,您可以这样做:

>>> from collections import Counter
>>> ls = [1, 2, 3, 3]
>>> c = Counter(ls)
>>> [x for x in ls if c[x] == 1]
[1, 2]
>>>
Run Code Online (Sandbox Code Playgroud)

这是一个参考collections.Counter.

  • 这是O(N ^ 2),适用于小型列表,但对于较大的列表则较慢.您可以通过先计算出现次数来修复它:`c = collections.Counter(ls); uniqs = [x for l in ls if c [x] == 1]` (6认同)