首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python删除列表中序列的内部项

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

Stack Overflow用户
提问于 2018-10-11 05:16:49
回答 3查看 73关注 0票数 1
代码语言:javascript
复制
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:

代码语言:javascript
复制
[0, 0, 0, 0,'o', 'o', 'o', 'o', 'o', 'o', 0, 0, 0, 'o', 'o', 'o', 0, 0, 'o', 'o']

我想在这一点上删除内部的'o‘,这样结果看起来就像这样:

代码语言:javascript
复制
[0, 0, 0, 0, 'o','o', 0, 0, 0, 'o','o', 0, 0, 'o', 'o']

如果可能的话,我希望在列表理解本身中这样做,并且我希望避免任何转换为字符串的事情(因为我的实际任务涉及到字典,而不是1和0)。有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2018-10-11 05:37:40

如果你真的想用一个理解列表来做到这一点:

代码语言:javascript
复制
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]

应该适用于您的示例。

票数 1
EN

Stack Overflow用户

发布于 2018-10-11 05:40:02

您可以执行以下操作:

代码语言:javascript
复制
>>> 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']
票数 1
EN

Stack Overflow用户

发布于 2018-10-11 05:36:18

如果k0,则使用itertools.groupby追加该组中的所有项;如果k'o',则只追加第一个和最后一个项目,中间的'o'除外

代码语言:javascript
复制
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']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52748914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档