如何删除使用列表理解列表重复的项目?如何删除使用列表理解列表重复的项目?(How to remove

2019-05-12 02:31发布

如何删除使用列表理解列表重复的项目? 我有下面的代码:

a = [1, 2, 3, 3, 5, 9, 6, 2, 8, 5, 2, 3, 5, 7, 3, 5, 8]
b = []
b = [item for item in a if item not in b]

但它不工作,只是产生相同的名单。 为什么它的产生相同的名单?

Answer 1:

因为它是生产相同的列表b包含在运行时没有任何元素。 你想要什么就这一点:

>>> a = [1, 2, 3, 3, 5, 9, 6, 2, 8, 5, 2, 3, 5, 7, 3, 5, 8]
>>> b = []
>>> [b.append(item) for item in a if item not in b]
[None, None, None, None, None, None, None, None]
>>> b
[1, 2, 3, 5, 9, 6, 8, 7]


Answer 2:

如果你不介意使用比列表中理解不同的技术,你可以使用一组:

>>> a = [1, 2, 3, 3, 5, 9, 6, 2, 8, 5, 2, 3, 5, 7, 3, 5, 8]
>>> b = list(set(a))
>>> print b
[1, 2, 3, 5, 6, 7, 8, 9]


Answer 3:

使用keysdict与价值观构建a作为其键。

b = dict([(i, 1) for i in a]).keys()

或者使用一组:

b = [i for i in set(a)]


Answer 4:

究其原因,该清单是不变的是, b开始是空的。 这意味着, if item not in b总是True 。 已经生成列表之后才分配给变量这一新的非空列表b



Answer 5:

使用GROUPBY :

>>> from itertools import groupby
>>> a = [1, 2, 3, 3, 5, 9, 6, 2, 8, 5, 2, 3, 5, 7, 3, 5, 8]
>>> [k for k, _ in groupby(sorted(a, key=lambda x: a.index(x)))]
[1, 2, 3, 5, 9, 6, 8, 7]

离开了关键的参数,如果你不关心什么顺序值首次出现在最初的名单,如

>>> [k for k, _ in groupby(sorted(a))]
[1, 2, 3, 5, 6, 7, 8, 9]

你可以做一些很酷的事情groupby 。 要确定出现多次的项目:

>>> [k for k, v in groupby(sorted(a)) if len(list(v)) > 1]
[2, 3, 5, 8]

或者建立一个频率词典:

>>> {k: len(list(v)) for k, v in groupby(sorted(a))}
{1: 1, 2: 3, 3: 4, 5: 4, 6: 1, 7: 1, 8: 2, 9: 1}

有一些非常有用的功能在itertools模块: chainteeproduct仅举几例!



Answer 6:

>>> a = [10,20,30,20,10,50,60,40,80,50,40,0,100,30,60]
>>> [a.pop(a.index(i, a.index(i)+1)) for i in a if a.count(i) > 1]
>>> print(a)


文章来源: How to remove duplicate items from a list using list comprehension?