Elegant way to remove contiguous repeated elements in a list(删除列表中连续重复元素的巧妙方法)
问题描述
我正在寻找一种干净、高尚的方式从下面的列表中剔除:
所有连续的重复元素(超过一个数字),以获取:
但是,尽管我有可用的代码,但它给人的感觉不是毕达哥拉斯式的,而且我确信一定有解决办法(也许是一些不太为人所知的itertools
函数?)以一种更简洁、更优雅的方式实现我想要的。
推荐答案
这里是一个基于Karl's answer的版本,它不需要列表(tmp
、切片和压缩列表)的副本。对于大型列表,izip
比(Python2)zip
要快得多。chain
比切片稍慢,但不需要tmp
对象或列表副本。islice
加上制作tmp
会更快一些,但需要更多内存,而且不太优雅。
timeit
测试表明,它的速度大约是Karl的答案或我最快的groupby
版本的两倍。
如果您的列表可以包含None
s,请确保使用None
以外的值(如object()
)。
如果您需要此版本来处理不是序列的迭代器/可迭代对象,或者您的组很长:
timeit
显示对于1,000个项目组,它的速度大约是其他版本的10倍。
较早、较慢版本:
这篇关于删除列表中连续重复元素的巧妙方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!