如何在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)的连续副本(如填充邻居)。
我在想一些平滑过滤器的王但是找不到。此外,我正在考虑为此编写原始代码但不能考虑逻辑。
假设它是二进制列表。
正如@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]