如何使用列表推导从列表中删除重复项?

Ali*_*rld 9 python list-comprehension

如何使用列表推导从列表中删除重复项?我有以下代码:

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]
Run Code Online (Sandbox Code Playgroud)

但它不起作用,只产生相同的列表.为什么它产生相同的清单?

Chr*_*tts 16

它生成一个相同的列表,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]
Run Code Online (Sandbox Code Playgroud)

  • 注意使用[列表理解副作用](http://stackoverflow.com/q/5753597/566644).请使用常规for循环. (16认同)

Nie*_*ein 8

如果你不介意使用与列表理解不同的技术,你可以使用一个集合:

>>> 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]
Run Code Online (Sandbox Code Playgroud)

  • set不会保留初始订单......所以请注意这一点 (2认同)

Vik*_*kas 5

使用keysdict与价值构建a为关键。

b = dict([(i, 1) for i in a]).keys()
Run Code Online (Sandbox Code Playgroud)

或使用一套:

b = [i for i in set(a)]
Run Code Online (Sandbox Code Playgroud)