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]
bar:
[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)。有什么想法吗?
发布于 2018-10-11 05:37:40
如果你真的想用一个理解列表来做到这一点:
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]
应该适用于您的示例。
发布于 2018-10-11 05:40:02
您可以执行以下操作:
>>> 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']
发布于 2018-10-11 05:36:18
如果k
为0
,则使用itertools.groupby
追加该组中的所有项;如果k
为'o'
,则只追加第一个和最后一个项目,中间的'o'
除外
from itertools import groupby
bar = [0, 0, 'o', 'o', 'o', 'o', 'o', 'o', 0, 0, 'o', 'o', 'o', 0, 0, 'o', 'o']
new = []
for k, g in groupby(bar):
x = list(g)
if k == 0:
for i in x:
new.append(i)
elif k == 'o':
new.append(x[0])
new.append(x[-1])
print(new)
# [0, 0, 'o', 'o', 0, 0, 'o', 'o', 0, 0, 'o', 'o']
https://stackoverflow.com/questions/52748914
复制相似问题