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