我有一个项目列表,我想从中删除所有相似的值,但第一个和最后一个。例如:
listIn = [1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1]
- 前三个元素“1, 1, 1”相似,去掉中间的“1”。
- 接下来的两个零是未修改的。
- 一个就是一个。保持不变。
- 四个零。删除第一个和最后一个之间的项目。
导致:
listOut = [1, 1, 0, 0, 1, 0, 0, 1]
在c++中这样做的方式很明显,但它看起来与python编码风格有很大不同。或者这是唯一的方法?
基本上,只需删除图表上“y”值未更改的过多点:
最佳答案
使用itertools.groupby()
对您的值(value)观进行分组:
from itertools import groupby
listOut = []
for value, group in groupby(listIn):
listOut.append(next(group))
for i in group:
listOut.append(i)
break
或者,为了提高效率,作为发电机:
from itertools import groupby
def reduced(it):
for value, group in groupby(it):
yield next(group)
for i in group:
yield i
break
演示:
>>> listIn = [1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1]
>>> list(reduced(listIn))
[1, 1, 0, 0, 1, 0, 0, 1]
关于从列表中删除相似项目的pythonic方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20995966/