从列表中删除相似项目的pythonic方法

标签 python python-itertools

我有一个项目列表,我想从中删除所有相似的值,但第一个和最后一个。例如:

listIn = [1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1]
  1. 前三个元素“1, 1, 1”相似,去掉中间的“1”。
  2. 接下来的两个零是未修改的。
  3. 一个就是一个。保持不变。
  4. 四个零。删除第一个和最后一个之间的项目。

导致:

listOut = [1, 1, 0, 0, 1, 0, 0, 1]

在c++中这样做的方式很明显,但它看起来与python编码风格有很大不同。或者这是唯一的方法?

基本上,只需删除图表上“y”值未更改的过多点: enter image description here

最佳答案

使用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/

相关文章:

python - 使用 pySmartDL 并行下载 - python 多进程

python - 如何使用 flask.redirect 发送 POST 请求?

python - 列表列表中的重复删除

python - 函数调用和函数中的代码给出不同的结果

python - 成对嵌套列表的大多数 pythonic(和有效)方式

python - 计算方程的可能组合

python - 在 1D numpy 数组中的随机位置注入(inject)随机数

python - os.listdir() 是确定性的吗?

python-3.x - 如何获得字符串(元音或辅音)的组合?

python - 如果我取消注释 for 循环中的 print() 函数, 'groups' 列表将填充空列表而不是结果