如何从列表中的相似项目集合中保留唯一项目?

Deb*_*ick 0 python list python-3.x

我有一个如下所示的列表

a = [5,5,5,5,3,3,2,2,2,2,5,5,5,2,2,2,2,2]
Run Code Online (Sandbox Code Playgroud)

我希望有以下输出列表

b = [5,3,2,5,2]
Run Code Online (Sandbox Code Playgroud)

请注意,我曾尝试使用

list(OrderedDict.fromkeys(a))
Run Code Online (Sandbox Code Playgroud)

这给了我

[5, 3, 2]
Run Code Online (Sandbox Code Playgroud)

请注意,它不考虑第 2 个 5 或第 2 个 2,因为到那时它们是非唯一的。

我需要一种方法让机器理解当它遇到一个唯一元素(比如第一个“5”)时,它应该将它存储在列表 b 中。因此,当它遇到第一个 '3' 或第一个 '2' 时,它也应该将它们存储在列表 b 中。到目前为止没有问题。当它遇到第二组“5”时,它应该将该 5 作为新元素存储在列表 b 中。第二组 2 也是如此。

有没有 Pythonic 的方法来做到这一点?

Ric*_*Kab 5

除了执行 for 循环之外,您还可以使用 itertools groupby:

import itertools

a = [5,5,5,5,3,3,2,2,2,2,5,5,5,2,2,2,2,2]
b = [x[0] for x in itertools.groupby(a)]  # [5, 3, 2, 5, 2]
Run Code Online (Sandbox Code Playgroud)

相关文档可以在这里找到:https : //docs.python.org/3/library/itertools.html#itertools.groupby

编辑:一些澄清。文档中的这一段解释了能够计算列表中重复出现的原因(重点是我的):

groupby() 的操作类似于 Unix 中的 uniq 过滤器。每次键函数的值发生变化时,它都会生成一个中断或新组[...]