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

问题描述 投票:1回答:1

如何在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,1,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,0]

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

我在想一些平滑过滤器的王但是找不到。此外,我正在考虑为此编写原始代码但不能考虑逻辑。

假设它是二进制列表。

python
1个回答
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]
© www.soinside.com 2019 - 2024. All rights reserved.