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 的方法来做到这一点?
除了执行 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 过滤器。每次键函数的值发生变化时,它都会生成一个中断或新组[...]