替换块大小小于阈值的重复项 - Python

时间:2017-12-26 12:45:40

标签: python

如何在python中从这样的列表中删除小于某个阈值(例如4)的块大小的连续重复项?

  

L = [0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0, 0,1,1,0,0,0,0,0,1,1,0,0,0,0]

我希望结果如下:

  

O = [0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0]

新列表还应该用邻居值替换块大小小于阈值(此处为4)的连续重复项(如填充邻居)。

我在想一些平滑过滤器之王,但无法找到。此外,我正在考虑为此编写原始代码,但却无法考虑逻辑。

假设它是二进制列表。

1 个答案:

答案 0 :(得分:1)

正如@cᴏʟᴅsᴘᴇᴇᴅ所述,您可以使用itertools.groupby来实现您的目标。

from itertools import groupby

L = [0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0,0]
ans = []

for (i,j) in groupby(L):
    a = list(j)
    if len(a)<4: # replace with threshold
        ans = ans + [1-i]*len(a) # not of a binary value i = 1-i
    else:
        ans = ans + a
print(ans)

输出:

[0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]