duk*_*kem 3 python python-itertools
我有一个项目列表,我想从中删除所有类似的值,但第一个和最后一个.例如:
listIn = [1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1]
Run Code Online (Sandbox Code Playgroud)
导致:
listOut = [1, 1, 0, 0, 1, 0, 0, 1]
Run Code Online (Sandbox Code Playgroud)
在c ++中这样做的方式非常明显,但它看起来与python编码风格有很大不同.或者这是唯一的方法?
基本上,只需删除图中"y"值未更改的过多点:

用于itertools.groupby()对您的值进行分组:
from itertools import groupby
listOut = []
for value, group in groupby(listIn):
listOut.append(next(group))
for i in group:
listOut.append(i)
break
Run Code Online (Sandbox Code Playgroud)
或者,为了提高效率,作为发电机:
from itertools import groupby
def reduced(it):
for value, group in groupby(it):
yield next(group)
for i in group:
yield i
break
Run Code Online (Sandbox Code Playgroud)
演示:
>>> listIn = [1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1]
>>> list(reduced(listIn))
[1, 1, 0, 0, 1, 0, 0, 1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |