猿问

Python 删除列表中序列的内部项

foo = [0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,1,1]

bar = [x if x==0 else 'o' for x in foo]

酒吧:


[0, 0, 0, 0,'o', 'o', 'o', 'o', 'o', 'o', 0, 0, 0, 'o', 'o', 'o', 0, 0, 'o', 'o']

我想此时删除内部的“o”,以便结果如下所示:


[0, 0, 0, 0, 'o','o', 0, 0, 0, 'o','o', 0, 0, 'o', 'o']

如果可能,我想在列表理解本身中执行此操作,并且我想避免任何转换为字符串的操作(因为我的实际任务涉及字典而不是 1 和 0)。有任何想法吗?


慕尼黑8549860
浏览 169回答 3
3回答

catspeake

如果你真的想用一个理解列表来做:bar=[x if x==0 else 'o' for i,x in enumerate(foo) if (i==0 or i==len(foo)-1) or x==0 or foo[i-1]==0 or foo[i+1]==0]应该适用于您的示例。

江户川乱折腾

你可以做:>>> foo = [0,0,0,0,1,1,1,1,1,1,0,0,0,1,1,1,0,0,1,1]>>> from itertools import groupby>>> [ext for c, grp in groupby(foo) for ext in (grp if c==0 else ['o']*min(2,len(list(grp))))][0, 0, 0, 0, 'o', 'o', 0, 0, 0, 'o', 'o', 0, 0, 'o', 'o']
随时随地看视频慕课网APP

相关分类

Python
我要回答